일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- ipfs singletone
- 백준 2252 줄세우기
- 백준 1504 java
- Java Call By Refernce
- kotiln const
- javav 1676
- 자바 1676
- spring mongoTemplate
- spring mongodb
- 자바 백준 팩토리얼 개수
- go
- ipfs bean
- spring mongoTemplate switch
- java 파티
- java 백준 1509
- mongodb lookup
- 익명 객체 @transactional
- 백준 특정한 최단 경로
- kotiln const val
- Spring ipfs
- rabbitmq 싱글톤
- java 1238
- 안정해시
- nodejs rabbitmq
- 백준 연결요소 자바
- java 팩토리얼 개수
- kotiln functional interface
- java 1509
- 전략 패턴이란
- spring mongodb switch
- Today
- Total
목록web study/Spring (29)
공부 흔적남기기
우리는 왜 그렇게 객체지향 코드를 짜기 위해 노력하는가? 회사A가 있다고 가정해보자 회사 A는 이제 막 시작한 스타트 업으로 코드에 변경과 수정에 대한 부담이 없고 빠른 결과를 원한다. 따라서 절차 지향적으로 빠르게 코드를 짜기 시작했고 좋은 성과를 얻게되었다. 좋은 성과에 따라 새로운 여러 비즈니스 요구사항들이 들어오기 시작했다. 시간이 갈수록 절차지향적으로 짠 코드를 변경/수정하는데 많은 비용이 들기 시작한다. 많은 비용을 줄이기 위해선 변경과 수정에 들어가는 비용을 줄여야한다. 그럼 변경과 수정을 줄이기 위해선 어떻게 해야하는가? 당연희 여러 방법이 있겠지만 대표적으로 객체지향적으로 코드를 짜면된다.! 간단히 말해 소프트웨어의 중심은 변화이다. 이 변화를 좀 더 쉽게 다가가기 위해선 객체지향적 코드..
단일책임원칙이란 SOLID 원칙에서의 S로 하나의 메소드, 클래스는 하나의 책임만을 가져야 한다는 원칙이다. 이번 프로젝트를하면서 SOLID원칙을 지키고자 했지만 사실 빨리 개발하느라 바뻐 SOLID원칙은 거의 지키지 못한것 같다. 이번 프로젝트에서 어떤 로직을 충족하면 점수를 주거나 알람을 보내는 로직이 있었다. 일정 로직이 충족되는 로직과 알람을보내거나 점수를 보내는 로직이 한 메소드 안에 들어있어 코드가 너무 복잡했고 절대로 남이 봐서는 이해할수 없을 것 같은 코드였다. 이에 대한 해결책으로 ApplicationEventPubliser을 이용해 Event를 만들고 EventListener를 통해 일정 이벤트가 충족되었을때 새로운 일정 로직이 시작되도록 하여 한 메소드를 이벤트 기준으로 나누었다. 즉..
이번에 새로운 프로젝트를 하면서 JPA를 사용하여 쿼리를 사용하였다. 맨처음 개발할때 아무생각없이 spring data jpa 인터페이스를 통해 마구잡이로 개발하여 n+1 문제가 안나오는 곳을 찾을수가 없었다. 그래서 N+1문제가 문제가 뭔데 N+1문제는 select문을 1개를 날리겠다는 의도로 쿼리를 했지만 추가로 N번의 쿼리가 생기는 문제이다. 이 문제는 entity간의 연관관계 때문에 일어나게 된다. N+1문제를 트러블 슈팅하기전에 먼저 FetchLazy와 FetchEager에 대해 알아보자 Lazy와 Eager의 설정은 하나의 엔티티를 select할떄 엔티티와 연관관계가 맺혀진 엔티티를 어떻게 처리할 것인지 정하는 설정이다. Eager로 설정하게 되면 연관관계가 맺혀진 모든 엔티티를 한번에 다 가..
프로젝트를 하면서 유저들간 실시간 채팅방이 필요해 WebSocket,Stomp,Redis를 활용하여 채팅방을 구현하였습니다. 간단한 구조를 먼저 설명하자면 프론트쪽에서 HTTP를 통해 소켓연결을 하면 소켓 프로토콜이 연결되면서 실시간으로 서버와 클라이언트가 연결되게 된다. 클라이언트는 Request가 없어도 Response를 받을 수 있는 구조를 가지게 된다.간단히 순서를 알아보면엔드포인트에 프론트가 소켓통신을 위한 신호를 보내 서버가 OK신호를 보내면 소켓 connect가 된다.connect가 되면 프론트가 subscribe destination과 유저정보를 가진 요청을 보내고 데이터가 올떄까지 기다린다.앞으로 데이터를 subscirbe destination에 받는다.클라이언트는 send를 통해 pub..
Spring MVC에서 Kakao 소셜 로그인 하는 과정부터 간단히 보면 html 단에서 location.href를 통해 카카오 로그인 인증 코드를 받을 수 있는 URL로 이동한다. 코드를 받으면 미리 설정해 놓은 redirect_url로 돌아오는데 이때 Controller로 이 url을 잡는다. 잡았을때 @RequestParam에서 code가 들어가있다 code를 저장한다. code를 이용해 HttpRequest 를 만들어 kakao인증 페이지에 보낸다. 만약 code가 인증에 성공했다면 접근할 수 있는 JWT 토큰을 부여받는다. 다음 요청에 JWT토큰을 이용해 HttpRequest를 보낸다. 토큰이 알맞으면 카카오 로그인을 한 user의 정보를 받는다. 이제 순서대로 코드로 살펴보면 html 단에서 ..
SpringSecurity에서 .formlogin을 이용하여 로그인을 할때 실패시 .failureUrl을 사용하면 Controller에서 redirect된 Url을 못잡는 문제가 발생하였다. 어떤 이유인지는 정확히 모르겠지만 잡히지 않는 문제가 생겨 .failHandler를 사용하는 방식으로 해결하였다. .failHandler는 AuthFailureHandler 객체를 매개변수로 입력받는데 우리는 AuthFailureHandler 구현체를 만들어fail 로직을 만들어주면된다. 로직은 간단하다. @Component public class AuthFailureHandler implements AuthenticationFailureHandler { @Override public void onAuthentica..

MVC란 무엇일까? MVC는 Model, View, Controller의 약자이다. 그럼 먼저 Model 은 무엇일까? Model은 처리된 데이터로 Controller에 의해 View로 보내지게 된다. View는 클라이언트에게 보여질 페이지로 Model값을 받아 페이지를 완성해서 Response 로 보내지게된다. Controller는 주어진 URI에 따라 서비스를 처리하고 Model값을 보내고 View를 설정한다. MVC는 DispatcherServlet에 의해 관리되는데 DispatcherServlet의 구조는 다음과 같다. HTTP에서 Request가 넘어오면 핸들러를 매핑한 후 어댑터가 있는지 확인하여 어댑터를 연결해 핸들러를 통해 Model과 VIew값을 받아와 ViewResolver를 통해 Re..
Spring MVC는 DispatcherServlet에 의해 돌아간다. 간단히 복습용도로 DispatcherServlet이 돌아가는 과정을 간단히 적어보고자 한다. Request가 들어온다 Handler Mapping을 이용하여 Handler를 설정한다. HandlerAdapter를 이용하여 사용할 수 있는 Handler인지 확인한다. HandlerAdapter를 찾았다면 HandlerAdapter의 Handle이라는 메소드를 통해 Handler를 처리한다. Handler로 들어갈때 받은 Request의 정보를 ArgumentResolver와 HttpConverter를 통해 처리한다. Handler의 논리의 맞춰 data들이 처리가 된다. 처리가 된후 Response는 RetunValue핸들러와 Http..
IOC란 Inversion Of Control의 약자로 제어의 역전이라는 의미를 가지고 있다. 그러면 제어의 역전은 어떤 의미를 담고 있는 걸까??? 제어의 역전은 평소 개발자가 객체의 메소드를 호출하여 사용했다면 이러한 제어를 프레임워크에게 주어 프레임워크가 제어하는대로 개발하는 것이 제어의 역전의 의미이다. 예를들어 우리가 Repository를 사용하는데 MySql를 사용할지 Redis를 사용할지 정확히 몰라 둘다 개발해두었다고 가정하자 후에 어떤것을 사용할지 결정이되면 AppConfig라는 제어를 해주는 코드에 사용할 Respository를 적게되면 그 Repository가 사용되는 것이다. 이것은 수동의 예고 자동으로는 Component라는 어노테이션을 붙여주면 자동으로 설정되게 된다. 즉 어떤 ..
과거에 jsp를 사용했던 방법에 대해 간단히 기록 과거 jsp는 MVC모델을 사용하지 않아 jsp파일 안에 자바코드와 html그리고 html내부에서 데이터를 가져오는 동작을 하였다. 그래서 jsp파일은 커질수 밖에 없었고 유지보수가 굉장히 힘들었다. 과거 jsp를 사용하는 방식이다. 메인 안녕하세요를 영어로하면? 위형식으로 하는데 jsp파일에 CRUD가 다들어가고 반복문 조건문 등등 여러가지를 사용하게되면 하나의jsp에 파일이 엄청나게 들어가게 될것이다 이런 문제점을 해결하고자 사용되는것이 MVC로 jsp와 Servlet을 함께 사용하게 된다.