OAS 사용해 API 문서 작성하기
·
Spring
지금까지는 주로 spring-restdocs 를 이용해 API 를 문서화 했습니다. spring-restdocs 를 사용한 이유는 아래와 같은 이유로 사용을 했습니다. 테스트 코드를 기반으로 작성, 테스트를 통과해야 문서를 만들 수 있으니 문서에 신뢰성이 생깁니다 프로덕션 코드에 문서화를 위한 코드를 추가할 필요가 없습니다 Swagger 는 문서화를 위한 코드를 추가해줘야 합니다 이러한 이유로 restdocs 를 사용했지만 문제가 있었습니다. 바로 문서를 보기 싫다는것! (제 기준으로는...ㅎㅎ) 기껏 신경써서 문서를 만들었지만 화면에 보이는 것은 칙칙한 API 문서… 조치가 필요했습니다. 그래서 Swagger 사용을 고려해봤으나 코드에 api 문서 관련 코드를 넣고 싶지 않아 사용하지 않았습니다. 자료..
Tomcat 실행시 스프링 내부 동작과정
·
Spring
Tomcat 실행시 스프링 내부 동작과정에 대해 설명해볼게요 Tomcat 실행했을 때 일어나는 동작 톰캣 실행전에 web.xml에 으로 전역 파라미터를 설정해요. 파라미터 이름은 contextConfigLocation이고 어떤 객체들을 미리 만들어 놓을지가 작성된 설정파일의 경로를 적어놔요. 톰캣이 실행되면 클래스(리스너)의 이름을 같은 web.xml에 작성해요. 톰캣을 실행하면 가 등록되어 있는 ContextLoaderListener 객체를 호출하는데 이 객체는 내부적으로 부모객체를 실행해요. 부모객체는 ContextLoaderListener이며, 이 객체에서 Root ApplicationContext를 생성하고 웹과 관련이 없는 객체를 저장해요.(ex: dao) Root ApplicationConte..
Thymeleaf LocalDate 사용법
·
Spring
Thymeleaf LocalDateTime 사용법에 대해서 알아볼게요. Thymeleaf에서 LocalDateTime 을 처음 쓸때... 여기서 스트레스 받는 분이 은근 많더라구요. POST 방식에서 사용하는 법. 우선 사용중인 Domain 클래스는 이런식으로 되어있어요. 아래는 생략~ html 파일에서 날짜를 선택할 거에요. 그래서 input 태그를 아래와 같이 만들어줬어요. {% codeblock %} {% endcodeblock %} Contorller 에서는 아래와 같이 만들어 줬어요. 전체 코드는 아니고 필요한 부분만 찰칵! {% codeblock %} @PostMapping("/product_detail/register") public String registerProduct(@ModelAtt..
Spring Web MCV
·
Spring
이번 포스팅은 spring mvc 에 대해 써보려해요! 스프링 MVC가 요청을 어떻게 처리하고 돌려주는지에 대해 알아보기로 해요! 스프링 MVC 요청 처리 과정 스프링은 위에 그림과 같은 구조로 요청을 처리해요. 요청을 디스패처 서블릿, 핸들러 매핑, 컨트롤러, 뷰 리졸버 등으로 이동시키고 응답하게 되는 구조예요! 우선 요청(1) 이 브라우저에서 떠나면서 사용자가 요구하는 내용을 전달하게 돼요. 적어도 URL을 포함하고 있으며 폼에서 입력된 값들처럼 더 많은 추가 정보들이 전달 될 수도 있어요. 요청의 첫번째 도착지는 스프링의 DispatcherServlet 이에요. 대부분의 자바 웹 프레임워크와 마찬가지로 스프링 MVC 역시 많은 요청들을 하나의 프런트 컨트롤러 서블릿에서 처리해요. 단일 프론트 컨트롤..
JPA findOne, getOne 차이점
·
Spring
JPA는 @Transactional 로 묶인 곳에서 Entity 를 관리해요. @Transactional 은 스프링에서 트랜잭션을 관리하는 방법 중 하나인데, 프록시를 이용해서 타겟 오브젝트를 감싸고 트랜잭션 시작/끝 부가기능을 앞뒤에서 제공해요. 때문에 외부에서 접근해야 프록시가 적용되기 때문에 @Transactional 이 적용된 자기 자신(this)의 다른 메소드를 호출하려면 그냥 하면 안되고 부가적인 작업이 필요해요. JPA는 데이터베이스로의 무분별한 접근을 막기위해 영속성 컨텍스트에서 엔티티를 관리해요. 엔티티를 관리할 때 Lazy 란 개념이 있어요. 어떤 엔티티의 모든 필드가 필요한것이 아닐 경우가 있어요. A가 B를 필드로 가지고 있는데, B엔티티의 모든 필드가 당장 필요한게 아니라 A엔티티..
JPQL @Query 2개 이상 프로젝션 리턴
·
Spring
JPQL @Query 메소드에서 2개 이상의 프로젝션을 리턴할 때 어떤식으로 받아야 하는지 알아볼게요!! 스프링 프로젝트를 진행중에 생겼던 이슈에 대해 적어볼까 해요! 이번 이슈는 JPQL 에 관한 이슈에요. SQL 문을 짜는 것도 고역이었는데 그 이후에도 이슈가 생겨서 정말 뚝배기 깨질뻔했네요. 먼저 대략... 2시간에 걸쳐서 겨우겨우 SQL문을 완성했어요. 이번 포스팅에 필요한 부분만 올리자면! select me.*, me.name , count(*) from member ~ group by ~ ; 많이 생략했지만 이것만 있어도 돼요! 겨우겨우 구현한 SQL 문! Mysql Workbench 에서 실행하면 결과 잘 나옵니다. 그런데! 프로젝션이 하나인 경우만 써봤는데... 이번 SQL문은 프로젝션이 ..