Spring(71)
-
커넥션 풀 & 데이터소스
◎ 커넥션 풀-> 다음은 데이터베이스 커넥션을 획득하는 과정이다.1. 클라이언트에서 요청을 보낸다.2. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.3. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 4. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다.5. DB는 ID, PW를 통해 내부 인증을 하고, 내부에 DB 세션을 생성한다.6. DB는 커넥션 생성이 완료되었다는 응답을 보낸다.7. DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. -> 매 요청마다 커넥션을 새로 만들어 응답하는 것은 그 과정이 복잡하고 시간도 오래 걸린다.-> 애플리케이션 서버에서는 TCP/IP 커넥션을 새로 생성하기 위해 리소스를 매번 사용해야 한..
2024.11.09 -
JDBC
◎ JDBC-> 애플리케이션을 개발할 때 중요 데이터는 데이터베이스에 저장한다.-> 클라이언트가 애플리케이션 서버를 통해 데이터를 조회, 저장, 삭제 등을 하면 애플리케이션 서버는 아래와 같은 과정을 거쳐 데이터베이스에 접근하여 데이터를 가공한다.1. 커넥션 연결 : 주로 TCP/IP를 사용해 커넥션을 연결한다.2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 커넥션을 통해 DB에 전달한다.3. 결과 응답 : DB는 애플리케이션 서버로부터 받은 SQL을 수행하여 결과를 응답하고, 애플리케이션 서버는 응답 결과를 사용한다. -> 그런데 이 방법에는 2가지 문제가 있다.1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면(ex : MySQL에서 Oracle DB로 변경) 애플리케이..
2024.11.02 -
HTTP 메시지 컨버터와 요청 메플링 핸들러 어댑터 구조
-> HTTP 메시지 컨버터의 위치와 동작 구조를 보려면 스프링 MVC 구조에서 RequestMappingHandlerAdpater를 보면 된다. ◎ RequestMappingHandlerAdapter 동작 방식-> 컨트롤러는 HttpServletRequest, @RequestParam 등 다양한 파라미터를 사용할 수 있다.-> ArgumentResolver는 이렇게 컨트롤러가 다양한 파라미터를 유연하게 처리할 수 있도록 한다.-> 애너테이션 기반 컨트롤러를 처리하는 RequestMappingHandlerAdapter는 ArgumentResolver를 호출하여 컨트롤러(핸들러)가 필요로 하는 파라미터의 값(객체)를 생성한다.-> 파라미터의 값이 모두 생성되어 준비되면 컨트롤러를 호출하면서 값을 넘긴다. ..
2024.08.25 -
HTTP 메시지 컨버터
◎ HTTP 메시지 컨버터-> 뷰 템플릿으로 HTML을 생성하여 응답하지 않고, HTTP API와 같이 JSON과 같은 데이터를 HTTP 메시지 바디에 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 통해 JSON과 객체를 변환하여 데이터를 주고 받는다.-> 아래는 @ResponeBody의 동작 과정이다.-> 웹 브라우저에서 요청을 하면 내장된 톰켓 서버를 거쳐 controller에 요청이 간다.-> 해당 컨트롤러에 @ResponseBody가 적용되어 있어 HTTP 바디에 문자 내용을 직접 반환한다.-> @ResponseBody가 있기 때문에 viewResolver를 호출하지 않고, HttpMessageConverter를 호출한다.-> HttpMessageConverter는 JsonConverter와 S..
2024.08.25 -
[에러] javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Integer'.
-> 게시판 신고 기능을 구현하기 위해 int 형으로 신고 타입과 String으로 신고 사유를 받아서 db에 저장하도록 구현을 했고, 실행을 했는데 500 에러가 나왔다. 그런데 postman으로 실행 시 나오는 위 그림만 나오고 인텔리제이 로그에는 어떠한 에러 로그도 나타나지 않았다. 찾아보니 에러를 처리하기 위해 만들었던 클래스에 INTERNAL_SERVER_ERROR에 대한 처리를 하는 메서드에 바로 넘겨서 결과만 받아오는 바람에 postman에 해당 결과만 보여주고 넘어갔던 것이다. 해당 메서드를 지우고 다시 실행해봤다. 이전 처럼 500 Internal Server Error가 발생하였고 에러 로그도 같이 출력되어 확인해봤다. javax.validation.UnexpectedTypeExcepti..
2024.01.21 -
카카오 주소 검색 API 적용
서버 개발 중 메인 홈페이지에 주소 검색과 검색한 주소의 날씨를 보여주는 기능을 구현하려고 한다. 카카오 주소 검색 API를 이용하여 주소 검색을 구현했다. (카카오 - 주소 검색 API) 엔드 포인트는 http://localhost:8080/local/{지역이름}로 해당 지역이름에 해당하는 정보가 출력이 되도록 구현했다. @RestController @RequestMapping("/local") @RequiredArgsConstructor @Slf4j public class LocalController { // 주소 검색을 위한 컨트롤러 @Value("${spring.security.oauth2.client.registration.kakao.client-id}") private String client..
2023.10.06