Study/Spring

· Study/Spring
문제상황 GET API에 대해서 포스트맨이나 크롬에서 확인해 봤을 때에는 응답 시간이 0.1초 이내로 짧았는데, 스웨거에서 테스트했을 때는 10초 이상 걸리는 상황. 해당 API는 db의 5000개 가량의 데이터를 조회하는 GET API 문제 접근 포스트맨이나 크롬에서 테스트했을 때는 문제가 없었기 때문에 스웨거 관련 세팅을 잘못했을 것이다. 그래도 혹시 모르니 아래와 같이 로그를 찍어보았는데, 스웨거로 실행했을 때에도 포스트맨과 동일하게 ‘요청받은 시각’과 ‘응답 시각’ 차이가 0.1초 이내였다. 즉, 조회 결과를 스웨거 화면상에서 보여줄 때 지연이 발생한다는 것이었다. log.info("요청 받은 시각 : " + new SimpleDateFormat("YYYY. MM. DD HH:mm:ss.SSS")..
· Study/Spring
HTTP 통신을 통해 XML 데이터를 ReqeustBody로 받아서 파싱 후 처리한 후 다시 Response Body로 반환하는 API를 만들었다. 그 과정에서 xml 데이터를 String으로 받아서 Document 객체로 변환하고 Tag 들을 파싱 하여 값을 조회하고 수정하는 방법에 그리고 다시 Document를 String으로 변환하는 방법에 대해서 정리하였다. 기본 내장 라이브러리를 사용하기 때문에 build.gradle에 따로 의존성 추가할 건 없다. // build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' } ja..
· Study/Spring
Redis란? Remote Dictionary Server의 약자. Key-Value 형태의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반 DBMS 데이터베이스, 캐시, 메시지 브로커 등으로 사용되며, 인메모리 데이터 구조를 가진 저장소이다. db-engines.com 에 따르면 23년 11월 기준 key-value 형태의 저장소 중 Redis가 가장 인기 있는 DBMS이다. ※ 인메모리 데이터 저장소 사용 이유 데이터베이스에 데이터를 저장하는 경우, 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 성능이 저하된다. 굳이 데이터베이스에 저장하지 않아도 되는 경우, 이러한 부하를 줄이기 위해 인메모리 데이터 저장소를 사용할 수 있다. Redis의 장점 및 특징 데이터를 메모..
· Study/Spring
문제 상황 Feign Client를 사용하여 Naver Cloud Platform의 SMS 서비스 Open API를 요청하는데 401(Unauthorized) 에러 발생. 해결 과정 Unauthorized 에러이기 때문에 네이버 서버에 인증하는 부분에서 값이 제대로 들어가지 않았다고 생각하여 먼저, 인텔리제이 환경변수에 serviceId, 액세스 키, 시크릿 키 값이 제대로 들어갔는지 확인함. → 제대로 들어가 있었음. HttpHeader를 여러 개 전달해야 했는데, 그 과정에서 여러 개의 헤더가 제대로 들어가지 않았다 생각하여 Header를 만들고 전달하는 방법을 바꾸어 시도 → 동일하게 401에러 발생 스프링 코드의 Feign Client에서 Naver 서버로 Post 요청을 보낼 때, 헤더 값이 제..
· Study/Spring
서비스 회원가입 시 휴대폰 문자 인증 기능을 구현하기 위해 NCP(Naver Cloud Platform)에서 제공하는 SENS API를 Feign Client로 호출하는 과정을 정리하였다. SENS(Simple & Easy Notification service)는 NCP에서 제공하는 서비스로, sms 뿐만 아니라 push, 알림톡 등 다양한 기능을 사용할 수 있다. 그중, sms를 이용하여 회원가입을 하고자 하는 유저의 전화번호로 인증 번호를 보내고 인증을 수행하였다. 그 과정을 RestTemplate이 아니라 Feign Client로 구현하였다. 공식 문서가 친절하게 잘 정리되어 있어서 API를 사용하기 편리하다. Feign 이란? Netflix에서 개발한 Http Client Binder 이다. 선언..
· Study/Spring
연관관계 매핑을 JPA 계의 포인터라고도 한다. 낙오의 갈림길이라는 의미이다. 연관관계의 개념을 정확히 알지 못한 채 프로젝트를 진행하다 보니 헷갈리는 부분이 너무 많아서 기본 개념을 확립해야겠다는 생각이 들었다. 연관관계 매핑 객체는 참조(주소)를 사용해서 관계를 맺고, 테이블은 외래 키를 사용해서 관계를 맺는다. 이 둘은 완전히 다른 특징을 가진다. 객체 관계 매핑에서 가장 어려운 부분이 바로 객체 연관관계와 테이블 연관관계를 매핑하는 일이며 이를 연관관계 매핑이라 한다. 객체 연관관계와 테이블 연관관계의 가장 큰 차이 참조를 통한 연관관계는 항상 단방향이다. 객체의 양방향 관계는 사실 서로 다른 단방향 관계 2개이다. 반면, 테이블은 외래 키 하나로 양방향으로 JOIN할 수 있다. 테이블의 양방향 ..
· Study/Spring
IoC와 DI는 스프링에만 국한된 단어가 아니다. IoC는 프로그래밍 원칙 중 하나이고 DI는 디자인 패턴 중 하나이다. 제어의 역전(Inversion of Control) : 내가 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것. 말 그대로 제어권이 뒤바뀐다는 의미한다. 객체 측면에서는 객체에 대한 제어권을 애플리케이션이 가지는 게 아니라 프레임워크가 가지는 것을 의미한다. IoC가 왜 필요한가? 기존에는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고 연결하고 실행까지 다 했다. 한 마디로 구현 객체가 프로그램의 제어 흐름을 스스로 다 조종했다. 혼자서도 모든 걸 알아서 잘하는 스마트한 객체를 설계했다는 뜻이다. 이는 개발자의 입장에서는 자연스러운 흐름이며 프로..
· Study/Spring
싱글톤 패턴(Singleton Pattern) 웹 애플리케이션에서는 싱글톤 패턴이 많이 활용된다. 웹 애플리케이션은 보통 여러 클라이언트가 서버에 동시에 요청을 한다. 아래 그림과 같이 클라이언트가 memberService를 요청하면 new로 객체를 생성하여 반환해준다. 여러 클라이언트가 요청할 때마다 객체를 새로 생성하여 반환하기 때문에 메모리 낭비가 심하다. 이러한 문제를 해결하기 위해 등장한 방안이 해당 객체가 딱 1개만 생성되고 다른 클라이언트들에게 공유하도록 설계하는 것이고 이를 싱글톤 패턴이라 한다. 싱글톤 패턴은 단순하지만 강력한 흐름을 따른다. (물론 이 흐름말고도 다양한 방법으로 구현할 수 있다.) 싱글톤 패턴은 클래스의 인스턴스가 딱 하나만 생성되는 것을 보장한다. 어떻게? -> 객체 ..
· Study/Spring
게시판을 구현하기 위해 여러 페이지를 HTML로 만들었으며 그 과정 중 유용한 내용을 정리하였다. 먼저, 타임리프(thymeleaf template engine)를 많이 사용하였다. 템플릿 엔진(Template Engine) : 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어로, 순수하게 Java Application(jar)으로만 웹 구현과 기동이 가능하다. Thymeleaf 템플릿 엔진 사용법 1. build.gradle에 아래 코드를 추가하여 의존성을 주입해준다. implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 2. html 태그 안에 아래 속성을 추가해준다. - 의 xmlns 속성은 해당 문서..
· Study/Spring
스프링부트를 사용하여 기본적인 CRUD 기능이 있는 게시판을 구현하였다. 그 과정을 정리하고자 한다. 모든 코드를 설명하는 것보다는 내가 게시판을 구현하면서 했던 고민과 생각을 중점적으로 글을 작성하였다. 인프런 김영한 님의 스프링 강의를 정주행하고 학습한 내용을 바탕으로 구현하려고 했는데 나는 아직 자바도 제대로 공부한 적도 없고 스프링도 처음 접하는 상황이었다. 때문에, 강의에서 알려주는 꿀팁이나 테크닉이 얼마나 유용한 것인지, 강의에서 제시하는 구현 틀과 방법이 얼마나 효율적인 구조인지 공감하기 힘들었다. 이 상태로 프로젝트를 진행하면 어떻게든 게시판을 완성할 수는 있겠지만 나에게 남는 게 많지 않을 것 같았다. 직접 무수한 시행착오를 겪으며 목표를 달성하고 강의를 다시 정주행한다면 깊은 공감에서 ..
hyobinside
'Study/Spring' 카테고리의 글 목록