전체 글 196

WebApplicationContext란

우선 인프런 김영한님 강의에서 본 spring MVC 구조를 살펴보자. Dispatcher Servlet은 가운데에서 요청과 controller을 핸들러 및 뷰를 이용해서 이어준다고 생각하면 될것같다. 그럼 WebApplication context는 뭐냐? 위에는 큰 구조이다. ContextLoaderListener 을 통해 서블릿 컨텍스트에 -서비스 클래스, 레포지토리 클래스 등이 담긴 WebApplicationContext를 만들고, DispatcerServlet은 위에 말한 Controller와 MVC 관련 인프라에 대한 Bean들을 담고있다.

카테고리 없음 2022.08.18

서블릿이란.

보면볼수록 헷갈리는 스프링 개념들.. 서블릿이란 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술. 서블릿은 이러한 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술. 서블릿 컨테이너 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하며 post, get여부에 따라 동적인 페이지를 생성하여 응답을 보냅니다. 아래는 서블릿의 코드임. public class myServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { Sys..

카테고리 없음 2022.08.18

클래스로더란? 쉽게정리

스프링을 돌리다가 첫줄이 클래스로더에 관련된 내용이라 궁금해졌다. 위에는 자바가 실행 동작과정을 설명한 그림이에용 우선 자바 어플리케이션이 어떻게 동작하는 지 알아봐요! 1. 사용자가 코드 작성- > .java파일이 됨 2. 자바 컴파일러(javac)가 바이트코드로 바꿔줌 ( .class) ** 중요** 3. 클래스로더가 JVM 메모리에 바이트코드를 업로드시킴 4. 실행엔진이 그 바이트 코드들을 실행시킴 클래스(바이트코드)를 전부 로드하지 않음 이유 ? -> 메모리 낭비될 수 있기 때문. 5. 실행엔진이 필요한 코드가 없다 -> 클래스로더에게 요청 -> .class 가져옴. 쉽게말해 클래스로더는 컴파일러가 만든 .class를 JVM 메모리에 눈치껏 올려주는 친구입니다. -- 클래스 로드 과정. 1. 로딩..

TIL 2022.08.18

220818 오라클 partition by

쿼리를 보다가 select resource_id, log_id, row_number() over(partition by resource_id order by log_id desc) row_num 라는 문법이 이해되지 않아서 찾아봤다. 위와같이 1.row_number()이란 ORDER BY에 의해 정렬된 순서를 숫자로 표현해주는 것. 2. ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) 3. 위를 예로들면, partition by JOB 이니, JOB 별로 row_num의 순서가 적혀져 있는것임. 4. 기존의 group by, having과 다른점은, select 테이블의 구조를 별로 망치지 않는다. group by 쓰면 엄청 단촐해지잖아 ㅇㅋ?

TIL 2022.08.18

220817 JPA 기본키 생성전략 4가지

@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 보통 이런식으로 기본키 생성한다. IDENTITY @GeneratedValue(strategy = GenerationType.IDENTITY) -> 기본키 생성을 데이터베이스에 위임. : id값을 null 로 하면 DB가 알아서 함 @GeneratedValue(strategy = GenerationType.SEQUNCE) -> 유일한 값을 순서대로 생성하는 특별한 DB 오브젝트를 사용해서 자동으로 숫자를 늘림 @SequenceGenerator(name = "NOTE_LOG_ID_GEN", sequenceName = "SEQ_NOTE_LOG_ID", allocationSize = 1)..

TIL 2022.08.17

220817 Gradle /Intellij IDEA 빌드 차이

클론받은 코드를 잘 사용하다가 테스트코드를 작성하려고 보니 TestResults가 DisplayName 을 안 보여줬다. 그래서 로 RunTest 및 Build를 둘다 intellij 로 바꾸어서 진행했다. 하지만 그렇게하면 기존빌드가 되었던 코드가 안되는 상황이 발생했다. 이유가 궁금해 찾아보니 두가지 방법은 빌드 방식이 차이가있다. Gradle은 build 폴더로 빌드 결과물이 나오고 IntelliJ IDEA는 out 폴더로 빌드 결과물이 나오는 차이도 있다 Gradle : 모든 걸 다시 빌드 ( 디폴트값) Intellij : 증분빌드 ( 변경된 부분만 빌드 --> 속도 빠름)

TIL 2022.08.17

220817 엔티티 어노테이션

@Convert(converter = DateTimeConverter.class) private LocalDateTime createdDate; @Convert: 엔티티의 데이터를 변환해서 데이터베이스에 저장할 수 있다 DB에 localdatetime이 들어가는 대신 다른게 들어감.. @Transient 해당 데이터를 컬럼에 매핑시키지 않겠다는 뜻! @Modifying @Query("delete from Chapter c where c.channelId = :channelId") int deleteAllByChannelId(@Param("channelId") String channelId); @Modifying : 벌크성 수정 쿼리에 붙는 어노테이션 ( 없을시 에러) 벌크성 수정이란? 대량의 데이터를 쿼..

TIL 2022.08.17

220816 자바 HashMap.

글 작성이유 : 해시맵 같은거는 코테에서만 사용하는줄 알았는데 코드에서 작성되어있기에 어떻게 사용하는지 알아보고자 함. 위와같은 코드로 글들의 '태그' 정보를 전송해야된다. 1. ENG,KOR , NUM은 그대로 있고, A: a로 시작하는 태그 단어들을 주어야하는데, 만약 a로 시작하는 태그가없으면 안써야한다. -> 따라서 hashmap을 사용한다!! 자바에서 Map과 HashMap 차이 : List와 ArrayList 차이처럼 그냥 구현체중 하나임. Hash_Map 은 이름 그대로 Hash Table 을 이용해서 키-값 관계를 유지하며, Map 은 red-black tree 알고리즘을 이용한다.

TIL 2022.08.16

220816 자바에서의 한글문자열. Dto에서 NoargsConstructor 가필요한이유

항상 숫자,영어로만 문자열을 생각하다보니 한글은 컴퓨터에서 문자열 처리를 어떻게하는지 몰랐다. 한글은 '유니코드' 로 컴퓨터에 규칙적으로 저장된다. (초성 * 21 + 중성) * 28 + 종성 + 0xAC00 식으로 유니코드에 저장되고. '가' 는 0xAC00이다. 이 중 한글에서 초성을 알고싶으면 공식이 있다. 초성 = ((문자유니코드 - 0xAC00)/28)/21 Dto에서 NoargsConstructor 가필요한이유 : 아래 글을 참조했습니다. https://blogshine.tistory.com/445 [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 1 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야 겠다 싶어 정리하는 글 이다. 우선 @Requ..

TIL 2022.08.16

220816 자바에서의 문자열

코테에서 C++로 문자열처리하다가 자바에서 문자열 처리하려니까 몰라서 정리. 기본적으로 0 ~ string.length()-1 까지 길이임. str.charAt(i); (i번째 문자) str1.concat(str2); str1 + str2 // 합치기. str.substring(6); 기존 c++ 함수와 비슷하다. 인자가 하나이면 6번째 포함 뒤에까지 다 포함(0부터 시작) str.substring(a,b); :: a부터 b-1 까지의 값을 보여줌!! 주의 * 만약 b가 index 범위 벗어나면, 에러나옴. str.substring(3,str.length() ) OK str.indexOf('a'); 'a' 가 존재하는 인덱스를 반환함. 두개 이상일 시 첫번째 값. str.lastIndexOf('a') 맨..

TIL 2022.08.16