분류 전체보기
-
Handshake Protocol 과정네트워크/보안 2021. 4. 14. 10:00
TLS_RSA_WITH ... 1) Client Hello client to server : 클라이언트가 통신하고자 하는 서버에게 연결 요청 - version 정보 - sessionID - Random Number : 클라이언트가 생성한 랜덤넘버 - Cipher Suites : 보안채널을 맺을 수 있는 후보군, 이 중에서 서버가 하나 선택할 예정 2) Server Hello server to client : 서버가 클라이언트에게 보내는 정보 - version 정보 - Random Number : 서버가 생성한 랜덤넘버 - Cipher Suite : TLS_RSA_WITH... 서버가 선택한 보안채널(위 예시는 TLS_RSA_WITH..를 서버가 선택) 3) Certificate Server Hello D..
-
JPA open session in view 설정하기spring/JPA 2021. 4. 8. 17:00
배경 영속성컨텍스트에 대해 어느정도 이해했다고 자만하고 있었다. 강의를 보며 지연로딩된 엔티티를 Controller에서 불러오는 경우가 있었는데 어라?정도로만 넘어가고 깊게 생각해보지 않았다. 직관적으로는 당연히 영속성컨텍스트는 서비스로직의 트랜잭션과 생명주기를 같이 할줄 알았다. 강의 막바지에 open session in view(osiv)에 대해 배웠고 그 내용을 정리한다. yml에 설정하기 osiv에 대한 아무런 설정 없이 was를 실행시키면 위와 같은 warn로그가 나온다.(있는 줄도 몰랐다) 내용을 보면 osiv는 기본이 true이고 db는 view를 랜더링할 때도 실행되며 이 경고창을 없애려면 osiv를 disable하라는 내용이다. 영속성컨텍스트는 트랜잭션 시작과 동시에 활성화 된다. 이때 ..
-
JPA와 하이버네이트 N+1 최적화 과정spring/JPA 2021. 4. 8. 16:21
배경 진행하는 프로젝트의 테이블이 단순해서 그런지 JPA 성능 이슈를 겪어본 적이 없다. 강의를 들어며 강조한 N+1문제도 딱히 그러려니 한데 워낙 강조되는 내용이기도 하고 왜 중요한지도 이해한 상태다. 다만, 써먹을 일이 없다보니 자꾸 까먹으니 정리해두자. ToOne에서 최적화 관계가 ToOne이라면 이미 best solution이 있다. 그냥 바로 join fetch를 쿼리 안에 녹이는 방법이고 이는 사실 RDB와도 직관적으로 다르지 않다. 잘 생각해보면 어렵지 않으니 간단하게 넘어가자. 컬렉션 최적화 컬렉션에서 최적화를 하려면 케이스 별로 다르게 최적화를 해야 한다. 단 하나의 컬렉션만 포함하며 페이징이 필요 없는 경우 이 경우는 ToOne과 마찬가지로 join fetch를 적용하면 되는데 단 di..
-
Service Discovery개념 및 netflix eureka 실습spring/cloud 2021. 4. 7. 13:00
배경 프로젝트에 적용한 기술을 공부하고 다듬는 것도 꾸준히 해야할 일이지만 새로운 기술을 배울 때만큼 열정적이지는 못한 것 같다. MSA아키텍처를 공부해야하긴 하고 미루고 미루다 인프런의 좋은 강의를 만난 것 같다. Service Discovery란? 트래픽이 증가하면서 동일한 서비스를 제공하는 customer service를 증설했다고 하자. 이제 서비스를 이용하는 client는 여러 서버 중 적절히 하나를 골라 서비스를 요청하면 된다. 이때 서버를 고르는 작업을 따로 registry로 분리한 게 service discovery라고 생각하면 될 것 같다. client는 단지 service discovery에게 어떤 서버에게 서비스를 요청할지 물어보기만 하면 된다(Lookup) 이때 service dis..
-
스프링 부트 자동설정 과정spring/core 2021. 4. 6. 14:54
배경 스프링을 알기 이전에 스프링부트를 접했고, 대략 5개월 정도 스프링 부트를 공부하고 있다. IDE 또는 커맨드라인에서 java -jar ...jar를 이용해 수도 없이 애플리케이션을 실행했고 그런가보다하고 그냥 사용해 왔다. 최근에 토비의 스프링으로 스프링에 대해 공부하고 있는데, 스프링을 이용해서 WAS 하나를 띄우기 위해 굉장히 복잡한설정과 많은 작업이 이루어진다는 걸 알아가고 있다. 그러한 굉장히 복잡한 작업을 나는dependency추가와 실행버튼 클릭만으로 자동으로 수행하고 있었다. 늘 그렇듯 추상화된 Layer를 알고 경험해봤다면 그 경험과 지식을 구체화시켜야 한다. 딥하게는 아니더라도 디버거를 따라가 보며 자동화된 설정을 경험해보자^^ www.youtube.com/watch?v=ssT24..
-
DispatcherServlet에서 요청을 처리하는 과정spring/core 2021. 4. 5. 12:48
배경 추상적으로 이건 이렇게 되고 그 다음 이렇게 돼를 아는 건 중요하지만, 좀 더 시간이 지나면 이 과정을 코드로 이해해볼 필요가 있다. 아키텍처를 코드레벨로 이해하는 건 굉장한 기반 지식이 되기 때문이다^^. 추상적인 DispatcherServlet의 요청 처리 과정 Filter를 거친 요청은 최종적으로 DispatcherServlet에서 처리한다. 이때부터 과정을 쭉 스캔해보자. 1) 서블릿에 등록한 핸들러매핑을 순회하며 요청에 맞는 핸들러매핑을 찾아낸다.(요청을 수행할 클래스) 2) 핸들러매핑을 찾는 똑같은 프로세스로 핸들러어댑터를 찾는다(어댑터 패턴을 위해) 3) 어댑터를 이용해 핸들러매핑(클래스의 메서드)를 수행한다 코드를 통해 눈으로 살펴보자 일단 그 이전 처리를 아주 간단하게 정리하면 Di..
-
프로세스운영체제 2021. 3. 27. 23:45
멀티프로그래밍 - 한 프로그램이 CPU를 독점하지 않고 IO를 하는 시점에 다른 프로그램이 CPU를 사용할 수 있다 - Throughput : 단위 시간 동안 더 많은 프로그램의 작업을 수행한다. 생산성 향상 - Utilitzation : CPU의 이용률이 증가한다 - Degree of multiprogramming : 동시에 수행하는 프로그램 수 가 증가한다 프로세스 - 실행 중인 프로그램, 메로리에 로드된 상태를 명심 - text : 프로그램의 코드 - stack : 메서드의 변수 저장 - data : 전역 변수 영역 - heap : 동적 할당 영역 프로세스 상태 - new - ready - running - waiting - terminated PCB(Process Control Block) - 운..
-
Spring Session과 SameSitespring/session 2021. 3. 24. 17:15
배경 프로젝트를 진행하다보면 여러가지 문제를 만난다. 그 중 비교적 쉽게 해결하는 문제가 있는 반면 상당히 오랜 시간을 들여 해결하는 문제가 있다. 재밌는 건 아무리 어려운 문제여도 문제를 정확하게 정의하고 원인을 파악한다면 해결하는 건 쉽다는 점이다. 중요한 건 지금 일어난 문제가 어떤 문제이고 원인을 파악하는 것이다. SameSite이슈를 해결하기 위해 걸린 시간은 1시간 정도로 매우 짧았지만 지금 발생하는 버그의 원인이SameSite때문이란 걸 확인하는 데에는 3~4시간 정도 걸린 매우 힘겨운 문제였다. 진행하는 프로젝트는 프런트와 백 서버를 분리한 프로젝트다. 프런트에서 유저정보와 함께 백서버로 로그인 인증 요청을 하면 백서버에서 검증과정 결과를 프론트로 다시 전달한다. 이때 stateless한 ..