Backend - RESTful하게 API 설계하는 방법
·
Network
본 글은 아래 링크의 포스트를 번역한 내용입니다.https://daily.dev/blog/restful-api-design-best-practices-guide-2024 RESTful API Design Best Practices Guide 2024Guide to RESTful API design best practices in 2024 covering resource-based architecture, stateless communication, client-server separation, URI design, HTTP method usage, security, performance optimization, and more.daily.dev 주요 권장 사항아래 예시를 따르면 사용하기 쉽고 유지보수 및..
Javascript - Kakao SDK 사용 시 사용자 정보 조회 API 응답에서 CI 항목 전달받지 못하는 문제 원인과 해결 방법
·
나의 에러 일지
개요Kakao SDK를 통해 사용자 정보를 조회해오는 API 응답에서 CI 항목이 제외되어서 카카오 회원가입 중 에러가 발생했다. 개발환경Spring 5.xJava 8JSPMybatisOracle 원인프로젝트에서는 Javascript SDK를 사용했다. ( Kakao Javascript SDK 가이드)이전까지는 CI가 잘 조회되고 있었고 관련 코드를 수정한적도 없었다. 그래서 카카오쪽 정책이 바뀌었을까 하고 찾아봤는데, 쉽게 찾을 수 있었다. 카카오 디벨로퍼에 공지로 올라왔던 것. 관련 글을 살펴보니 정보통신망법 개정안에 따른 조치라고 한다.제23조의6(연계정보의 안전조치 의무 등) ① 본인확인기관이 연계정보를 생성ㆍ처리하는 경우 「개인정보 보호법」 제29조에 따른 조치 외에 연계정보 생성ㆍ처리의 안전성..
Java - 생성 패턴 구현
·
Design Pattern
Singleton Pattern클래스의 인스턴스가 한 개만 생성되도록 보장하는 디자인 패턴하나의 인스턴스만 유지하기 때문에 리소스를 절약하고 전역적으로 상태를 공유할 수 있다.전역적으로 사용되기 때문에 예측하지 못한 동작을 일으키는 문제가 발생할 수 있고 테스트가 어렵다.구현 예시public class Singleton { private static Singleton instance; private String data = ""; private Singleton() { // private constructor } public static synchronized Singleton getInstance() { if (instance == null) { ..
Java - 자바 가비지 컬렉션(Garbage Collection)을 알아보자
·
Java
개요GC(Garbage Collection)은 에덴 영역에 생성된 객체의 메모리 할당/해제를 자동으로 관리하는 자바의 핵심 기능이다.GC 덕분에 개발자는 메모리 관리에 대한 걱정 없이 개발에만 집중할 수 있게 됐고, 이러한 장점이 크고 복잡한 애플리케이션을 만들 때 자바를 선택하게 만들었다. 하지만 성능 최적화와 메모리 관련 에러를 방지하기 위해서는 GC의 작동 원리에 대한 이해가 필수적이다. Java의 GC 작동 원리자바에서 모든 객체는 heap 영역에 저장된다. heap은 동적 할당을 위한 메모리 영역(runtime data area) 중 하나다. 객체가 더 이상 참조되지 않으면 GC의 수집 대상이 된다. GC는 heap 영역에서 사용되지 않는 객체를 주기적으로 찾아서 메모리를 해제해준다.이 과정에서..
Spring Data JPA - 외래키(Foreign Key)를 복합 기본키(Composite Primary Key)로 사용하기
·
JPA
개요복합 기본키(Composite Primary Key)란 두 개 이상의 컬럼을 묶어 만든 기본키(Primary Key)를 말한다.복합키는 다대다(N:M) 관계의 테이블의 관계를 풀어주고 공통으로 저장되는 데이터를 다룰 때 사용되는 매핑 테이블에서 사용될 수 있다.예를 들어, 내가 현재 개발중인 업무평가시스템에서 하나의 팀은 다양한 업무를 담당할 수 있고 하나의 업무를 여러 팀이 담당할 수 있다.즉, 팀과 업무 테이블은 다대다 관계를 갖고 있다. 그리고 각 업무에 대한 팀별로 평가를 받을 수 있다. 이 때 매핑 테이블 구조는 다음과 같다. 이제 Spring Data JPA에서 외래키로 복합키를 만드는 방법을 알아보자taskId: 업무 테이블의 외래키(foreign key)teamId: 팀 테이블의 외래..
JPA - Querydsl-sql 사용 시 Table not found 원인과 해결 방법
·
나의 에러 일지
개요프로젝트를 Mybatis -> JPA, QueryDsl로 마이그레이션하고 있다.복잡한 쿼리가 있어서 서브쿼리를 프롬절에서 사용해야 했는데, QueryDsl-jpa에서는 from절 서브쿼리를 지원하지 않아서 QueryDsl-sql을 사용해야 했다. 이 과정에서 발생했던 에러 처리 과정을 남긴다. 해결 방법은 간단했지만 원인을 알기 위해서 Querydsl, JPA, JPQL, NativeSQL을 조금 깊게 파고들 수 있는 계기가 되었다. 문제 발생쿼리를 테스트하는 과정에서 아래와 같은 에러가 발생했다.ORGANIZATIONLEADENTITY 테이블을 찾을 수 없다고 한다. nested exception is org.hibernate.exception.SQLGrammarException: could not..
Java - JVM 구조와 동작 방식
·
Java
개요최근에 프로젝트를 진행하면서 Mockito를 사용한 단위 테스트 중 static 메서드를 Mocking하지 못하는 문제를 만나게됐고 Mockito는 Proxy 방식으로 Mocking을 하기 때문에 static 메서드에 대한 Proxy 객체를 만들 수 없어서 Mocking할 수 없다는 걸 알게 됐다. 오히려 원인을 알게되니 '왜 static 메서드는 Proxy 객체를 만들지 못하지?'라는 생각이 들었고 이유를 파고들다보니 JVM 구조와 내부 동작 방식에 대해서 이해할 필요가 있었다. 자바의 기초이지만 대충 알고 넘어갔던 나 자신을 반성하면서 JVM에 대한 내용을 정리해본다.  Write once, Run anywhere JVM은 자바 프로그램을 실행하기 위한 프로그램이다. 위 문구처럼 한 번 작성한 코..
Spring Boot Test - Mockito로 Static Method Mock 만드는 방법
·
Spring
개요현재 프로젝트에서 SesseionUser라는 클래스가 있다.SessionUser는 세션에 User 정보를 관리하는 유틸리티 클래스로, static 메서드로 작성되어있다.public class SessionsUser {    public static void setSessionUser(HttpSession session, Users users) {        session.setAttribute("userSessionInfo", users);    }    public static Users getSessionUser(HttpSession session) {        return (Users) session.getAttribute("userSessionInfo");    }    public st..
Java - clazz 변수명은 왜 사용할까?
·
Why?
개요Java 코드를 살펴보다 보면 간혹 Class 객체 변수명으로 clazz를 사용하는 것을 볼 수 있다. 오늘도 Mockito 동작 원리가 궁금해서 관련 코드를 살펴보던 중에 또 clazz 변수명을 보게 되었다. 이전에 clazz를 보면 '왜 이름을 저렇게 지었지?'라고 생각만 하고 넘어갔지만 이번에는 조금 더 호기심이 생겨 clazz 변수명을 사용한 이유에 대해 알아보았다.public class MockSettingsImpl extends CreationSettings implements MockSettings, MockCreationSettings { ... private boolean invocationListenersContainsType(Class clazz) { Ite..
Spring Boot - JUnit5 테스트 중 No tests found for given includes 원인과 해결 방법
·
나의 에러 일지
Controller 단위 테스트를 작성하고 테스트를 돌렸는데,  No tests found for given includes 에러가 발생하면서 테스트에 실패했다.import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;import co.pes.domain.manager.controller.LoginManag..
Cold Bean
'분류 전체보기' 카테고리의 글 목록 (2 Page)