[스프링] 스프링 MVC - 기본기능 (마지막) HTTP 요청 메시지: text와 JSON
·
스프링
지난 글에서 요청 파라미터(query string, form-data)를 @RequestParam, @ModelAttribute로 바인딩하는 법을 보았다.이번에는 HTTP 요청 메시지(body) 자체를 읽어오는 방법을 살펴본다. 실무에서는 특히 JSON 본문을 주고받는 REST API가 많기 때문에 @RequestBody 사용을 익혀두는 게 중요하다.아래 예제는 text 본문과 JSON 본문을 각각 “초기 버전 → 점점 스프링 방식 → 최종 버전”의 흐름으로 설명한다. 1. text 본문 읽기: RequestBodyStringControllerv1. 서블릿 API로 직접 읽기 (가장 기초)@PostMapping("/request-body-string-v1")public void requestBodyStr..
[스프링] 스프링 MVC - 기본기능 (2) 요청 파라미터
·
스프링
웹 애플리케이션에서 가장 기본이 되는 기능 중 하나는 클라이언트가 보낸 데이터를 서버에서 받는 것이다.예를 들어 회원 가입 화면에서 이름과 나이를 입력하고 제출하면, 그 값들은 서버에 쿼리 파라미터나 폼 데이터로 전달된다.스프링 MVC는 이런 요청 파라미터를 처리하는 여러 가지 방법을 제공한다.이번 글에서는 그 방법들을 1) 서블릿 API로 직접 조회 → 2) @RequestParam 사용 → 3) @ModelAttribute 사용 순서로 살펴본다. 1. 서블릿 API로 직접 조회가장 기본적인 방식은 HttpServletRequest 에서 값을 직접 꺼내는 것이다.@RequestMapping("/request-param-v1")public void requestParamV1(HttpServletReque..
[스프링] 스프링 MVC - 기본기능 (1) 로깅
·
스프링
스프링 애플리케이션을 개발하다 보면 정보를 출력해야 하는 경우가 많다.이때 System.out.println() 으로 직접 콘솔에 출력하기보다는 로깅 라이브러리를 사용하는 것이 일반적이다. 1. System.out.println() 대신 로깅을 사용하는 이유운영 시스템에서 System.out.println() 을 그대로 사용하는 것은 적절하지 않다.로그 레벨을 지정할 수 없다.불필요한 출력이 섞여 유지보수가 어렵다.성능에 불리하다.따라서 운영 환경에서는 반드시 로깅 라이브러리를 사용해야 한다. 2. 스프링 부트 로깅 라이브러리스프링 부트는 기본적으로 spring-boot-starter-logging 을 제공한다.SLF4J: 로깅 인터페이스Logback: 기본 구현체SLF4J는 단순히 인터페이스를 제공하고..
[백준] 1325 효율적인 해킹 (JAVA)
·
코딩 테스트
문제링크:1325번: 효율적인 해킹 문제:해커 김지민은 잘 알려진 어느 회사를 해킹하려고 한다. 이 회사는 N개의 컴퓨터로 이루어져 있다. 김지민은 귀찮기 때문에, 한 번의 해킹으로 여러 개의 컴퓨터를 해킹 할 수 있는 컴퓨터를 해킹하려고 한다. 이 회사의 컴퓨터는 신뢰하는 관계와, 신뢰하지 않는 관계로 이루어져 있는데, A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다는 소리다. 이 회사의 컴퓨터의 신뢰하는 관계가 주어졌을 때, 한 번에 가장 많은 컴퓨터를 해킹할 수 있는 컴퓨터의 번호를 출력하는 프로그램을 작성하시오. 입력:첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 ..
[백준] 1068 트리 (JAVA)
·
코딩 테스트
문제링크: 1068번: 트리 문제: 입력:첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다. 셋째 줄에는 지울 노드의 번호가 주어진다. 출력:첫째 줄에 입력으로 주어진 트리에서 입력으로 주어진 노드를 지웠을 때, 리프 노드의 개수를 출력한다. 문제이해:트리에서 리프 노드는 자식이 없는 노드이고, 특정 노드를 삭제하면 그 노드와 모든 자손이 제거된다. 문제는 삭제 후 남은 트리에서 리프 노드가 몇 개인지를 세는 것이문제이다. 쉽게 예를 들어 이해해보자. 예제 입력 4는 다음과 같다.즉 출력은 2가 되는 것이다. 구현 방향:먼저 root 노드는 0번이 ..
[스프링] 스프링 Data JPA(마지막) Auditing
·
스프링 데이터 JPA
애플리케이션에서 엔티티를 다루다 보면 등록일, 수정일은 거의 필수적으로 필요하다.“이 데이터가 언제 만들어졌는지”, “마지막으로 누가 수정했는지”는 유지보수와 이력 관리에서 중요한 정보이기 때문이다. 따라서 엔티티에 기본적으로 등록일(createdDate), 수정일(lastModifiedDate), 등록자(createdBy), 수정자(lastModifiedBy) 같은 정보를 추적할 수 있어야 한다.이를 어떻게 구현할 수 있을까? 1. 순수 JPA로 Auditing 구현하기순수 JPA에서도 엔티티 생명주기 이벤트(@PrePersist, @PreUpdate)를 활용하면 간단히 등록일과 수정일을 기록할 수 있다.@MappedSuperclasspublic class JpaBaseEntity { @Colum..