본문 바로가기

Spring

(8)
카카오 로그인에 대한 리팩토링과 고찰 이번에 프로젝트를 진행하면서 네모 프로젝트에서 진행했던 카카오 로그인 서비스와 시큐리티레거시 코드들을 가져오려고 했으나 여러 문제점들을 발견하고 시큐리티의 버전 상승으로 인한 코드 변경으로 인해 kakao developers 문서를 정독하며 새롭게 코드를 작성해봤습니다.기존 코드의 문제점먼저 카카오 로그인 서비스에 대한 문제점입니다. public String kakaoLogin(String code) { KakaoTokenDTO userToken = getKakaoAccessToken(code); log.info("get kakao token"); KakaoAccountDTO kakaoAccount = null; try { kakaoA..
ResponEntity class 내부 뜯어보기 이번에 프로젝트를 진행하면서 기존에 사용하던 코드를 유지 보수하는 시간을 가졌습니다.기존 코드의 문제점간단한 예시로 기존 코드의 문제점을 확인해보겠습니다. @GetMapping("/seats") public ResponseEntity librarySeats() { List unavailableSeats = librarySeatService.getUnavailableLibrarySeat() .stream() .map(LibrarySeatResponse::from) .toList(); return ResponseEntity.ok().body(ApiUtils.success(unavailableS..
Spring Batch란? 배치 서비스란?대량의 데이터를 모아서 한번에 처리하는 서비스를 말합니다. 예를 들어 우리 주변에는 다음과 같은 작업들에 배치 서비스를 적용할 수 있습니다.주기적인 은행 업무쇼핑몰 알림세금 고지서 일괄 처리성적 일괄 처리이러한 배치 서비스는 어떠한 트리거 예를 들어, 스케쥴과 같은 이벤트에 맞춰 실행됩니다. 또한 한번 시작하면 어떻게든 종료되는 특징을 가지고 있습니다.배치 서비스 기본 3단계[Read] 많은 데이터를 데이터베이스, 파일, 메세지로부터 읽는다.[Processing] 읽은 데이터를 로직에 의해 처리한다.[Write] 로직으로 처리된 데이터를 수정된 형태로 출력한다.배치 처리를 위해 사용되는 도구들배치 처리를 위해 사용되는 도구들은 다양합니다.Cron, CrontabQuartzJenkins기타 ..
Swagger UI란? Swagger UI란 간단하게 말해서 문서화 Open API인데요 개발자라면 문서화가 얼마나 중요한지 알고 계시리라 생각됩니다. 왜냐하면 개발은 혼자만의 힘으로 하는 것이 아닌 팀적으로 개발하기 때문에 서로의 커뮤니케이션을 위해선 팀 회의를 통한 규칙 또는 내용들을 문서를 통해 정리할 필요가 있습니다.이런 문서화 API는 중요한 만큼 여럿 존재합니다. 흔히 알고 계시는 Java doc도 있고 저번 스크럼에 저가 소개한 Har Exploer도 문서화 API 중 하나입니다. 이번 시간에는 실무에서 가장 널리 쓰이고 예전부터 즐겨 사용해왔던 Swagger UI의 사용 방법과 설정 방법에 대해 설명드리겠습니다.Swagger UI를 지금부터 짧게 swagger라고 부르겠습니다. swagger는 spring boo..
QueryDSL이란? 이번 글에서는 저가 계속해서 공부 해봐야지, 알아봐야지 했다가 미루고 미뤘던 QueryDSL에 대해 이것은 무엇인지 또 어디서 사용되는 지 그리고 오랜만에 에러를 만나 어떻게 해결하려고 노력했는 지에 대해 작성해보겠습니다QueryDSL이란?QueryDSL이란 단어 그대로 쿼리 생성에 특화된 프레임워크를 의미합니다여기서 JPA에 대해 공부해보신 분들 또는 제 스크럼을 열심히 들으신 분들은 두 가지 의문점이 들 수 있습니다첫번째로는 ‘JPA가 자동으로 SQL 쿼리문을 생성해주는 것 아닌가?’맞습니다 JPA는 객체 지향적 언어 또는 어플리케이션과 관계형 DB 사이의 패러다임 불일치를 해결해 주는 프레임워크입니다 개발자는 객체지향관점으로 개발하고 JPA는 자동으로 SQL 쿼리문을 생성합니다 자동으로 SQL 쿼리..
feign 적용기 이번에 프로젝트를 진행하며 소셜 로그인 기능 구현이 필요했습니다. 소셜 로그인의 전체적인 플로우는 중점 내용이 아니기 때문에 자세히 언급하진 않겠지만 간단하게 말씀드리면 아래와 같이 진행됩니다. 서버는 프론트에서 요청을 받고 요청 값을 해당 소셜 로그인 서버에 보내 code 값과 token 값을 받아 다시 프런트에게 전달합니다 (사실 프론트에서 해당 소셜 로그인 서버에서 code 값을 받아 서버에게 전달해주면 code 값으로 다시 해당 소셜 로그인 서버와 통신해 token 값을 받아 프런트로 전달해주는 방법도 많이 사용합니다. 왜냐하면 callback url이 바로 프론트로 지정될 수 있기 때문입니다.)클라이언트 → 프론트 ↔ 서버 ↔ 해당 소셜 로그인 서버이런 플로우에서 서버가 생각해야할 부분은 “어떻..
양방향 연관관계와 진행하면서 만난 문제점 이번에 프로젝트를 진행하면서 몇 가지 에러 사항에 부딪혔습니다. 오늘은 그 중 한 가지에 대해 작성하려고 하는데요.모두들 양방향 연관관계에 대해 잘 아시나요? 저는 이번에 양방향 연관관계를 사용해야하는 상황을 만났는데요. 처음 사용해보고 시간이 부족해서 인터넷에서 여러 블로그를 훑고 따라 사용해봤습니다. 그래서 사실 제대로 된 이해가 되지 않았는데요. 프로젝트가 끝난 지금 양방향 연관관계에 대해 제대로 공부해봤습니다! 그리고 저가 부딪혔던 에러 사항에 대해서도 다른 해결방안들을 조사해봤습니다. 이번 주는 양방향 연관관계에 대해 작성해보겠습니다!양방향 연관관계먼저 양방향 연관관계, 단방향 연관관계는 객체 단위에서 적용됩니다. 즉 데이터베이스의 관계와는 상관이 없습니다. 왜냐하면 데이터베이스 테이블은 외래 ..
JPA란? JPA란?"JPA는 자바 진영의 ORM 기술 표준이다. JPA는 아래의 그림처럼 애플리케이션과 JDBC 사이에서 동작한다"그렇다면 ORM은 무엇일까? ORM은 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 여기서 패러다임의 불일치 문제에 관해서는 JPA 사용 이유 부분에서 확인해보자.과거 자바에서는 EJB(엔터프라이즈 자바 빈즈)라는 기술 표준을 만들었는데 그 안에는 엔티티 빈이라는 ORM 기술도 포함되어 있었다. 하지만 너무 복잡하고 기술 성숙도도 떨어져 이후에 나온 더 가볍고 실용적인 데다 기술 성숙도도 높은 하이버네이트라는 오픈소스 ORM 프레임워크에 밀렸다. 결국 EJB 3.0에서 하이버네이트를 기반으..