본문 바로가기

분류 전체보기

(104)
[스프링] 테스트 테스트 코드는 코드 품질을 위해 선택이 아닌 필수로 진행해야 하는 과정 중 하나이다.개발자는 다양한 시나리오에서 코드가 예상대로 작동하는지 확인하여 소프트웨어 품질을 유지하고 향상시킬 수 있다. 또한 새로운 요구사항으로 기존 코드가 수정되더라도 테스트 코드를 이용해 빠른 시간 안에 버그를 발견할 수 있고 기존 기능이 그대로 잘 동작하는지 확인이 가능하다.   Given - When - Then 패턴  Junit5자바(Java) 언어에서 사용되는 단위 테스트 프레임워크Junit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage@BeforeAll, @BeforeEach, @Test, @AfterEach, @AfterAll 제공   MockMockitoMock = 가짜M..
[스프링] AOP AOP 란?Aspect Oriented Programming : 관점 지향 프로그래밍횡단 관심사 분리 OOP(Object Oriented Programming)가 세상을 객체로 정의하는 개념이라면AOP는 관심사를 분리하여 모듈로 사용하는 것이다. 만약 모든 메서드의 실행시간을 측정하라는 요구사항이 있다고 가정해보자. 이때 다음과 같은 문제가 발생할 수 있다.중복 문제모든 서비스 메서드에 반복적으로 사용됨.적용해야 할 메서드가 너무 많음.변경 문제측정 단위가 변경되거나새로운 기능이 추가된다면적용된 모든 메서드를 일일이 수정해야 함. 이러한 문제를 해결하기 위해 AOP를 적용해 볼 수 있다.  - 핵심기능 : 메서드의 주요 기능- 부가기능 : 주요 기능이 아닌 부가 기능- 횡단관심사 : 여러 곳에서 공통적으..
카카오 로그인 개발하기 모든 웹 사이트에서 회원가입 과정을 거치는 것은 사용자에게 부담이 된다. 매번 회원가입 과정을 수행해야 할 뿐 아니라 웹 사이트마다 다른 아이디와 비밀번호를 기억해야 한다. 웹 사이트를 운영하는 측에서도 회원들의 개인정보를 지켜야하는 역할이 부담된다. 바이러스와 백신의 관계처럼 발전하는 해킹 기술을 막기 위해 보안을 강화하는 노력이 지속적으로 필요하기 때문이다. 이런 문제를 해결하기 위해 OAuth를 사용한 소셜 로그인이 등장했다.  OAuth 란?OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.사용자가 애플리케이션에게 모든 권한을 넘기지 ..
JPA의 N+1 문제 해결하기 Repository를 만드는데 두 가지 방법이 있다.  1. 순수 JPA 기반 레포지토리EntityManager를 직접 제어하며 커스텀한 데이터베이스 접근 로직 구현이 가능하다는 장점이 있지만반복적이고 일반적인 데이터 접근 로직을 직접 구현하며 생산성이 저하된다는 단점이 있다. @Repositorypublic class MemberJpaRepository { @PersistenceContext private final EntityManager entityManager; public MemberJpaRepository(EntityManager entityManager) { this.entityManager = entityManager; } /** * 회원 리스..
데이터 베이스 정규화 정규화(Normalization)란?정규화란 무엇일까? 위키백과에 검색한 결과 다음과 같이 나오게 된다. 정규화(normalization)는 관계형 데이터베이스의 설계에서 데이터 중복을 줄이고 데이터 무결성을 개선하기 위해 데이터를 정규형(normal form)에 맞도록 구조화하는 프로세스를 뜻한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 일반적으로 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다. 정규화의 목적은 하나의 테이블에서의 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것이다. 결국 한 마디로 요약하면, 테이블을 정..
JWT, Filter JWT와 SessionHTTP stateless, connectionless→ HTTP의 요청들은 서로 독립적이다! 만약 naver.com에 3번 요청을 했다면, 이게 몇 번째인지 알 수 있을까? ⇒ NO! 상태를 갖지 않는다는 것은 ‘데이터가 없다는 것’아무런 데이터가 없기 때문에 이 요청이 이 요청인지 저 요청이 저 요청인지 알 수 없음. 근데 우리는 분명 로그인이 가능하다.로그인이 되었다는 것은 분명 상태(데이터)를 가지고 있다는 뜻.즉, 클라이언트(유저)나 서버 둘 중 하나는 데이터를 갖고 있어야 한다. 누가? → 둘 다 갖고 있음.JWT : 클라이언트가 상태를 갖고 있음Session : 서버가 상태를 갖고 있음클라이언트와 서버 둘 다 상태(데이터)를 갖고 있을 수 있다.  즉 로그인 상태일 때,..
RDBMS vs NoSQL RDBMS 란? - Relational DataBase Management System (관계형 데이터베이스 관리 시스템) - 관계형 데이터 모델모든 데이터를 2차원 테이블 형태로 표현하는 것 - 관계형 데이터베이스2차원 테이블 형태로 표현한 데이터베이스. 속성과 값을 가진 테이블들은 서로 관계를 맺으며 존재 - 관계형 데이터베이스 관리 시스템2차원 테이블 형태로 표현한 데이터베이스를 생성하고 저장, 관리하는 소프트웨어 RDBMS 특징고정된 스키마 사용SQL(Structured Query Language)를 사용해서 데이터에 접근하며 CRUD 조작 허용트랜잭션의 무결정 보장을 위한 ACID 설정데이터의 일관성과 정확성 유지 위한 제약 조건 적용 가능NOT NULLUNIQUEFOREIGN KEY2차원 구조..
[스프링] 예외 처리 만약 프로그램 도중 오류가 발생했을 때 해당 예외에 대한 처리는 크게 두 가지로 나눌 수 있다. 1. 오류 페이지를 통한 예외 처리2. API를 통한 예외 처리 오류 페이지를 통한 예외 처리웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다.애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아 처리하면 아무 문제가 없지만 만약 예외를 잡지 못하고 서블릿 밖으로 예외가 전달되게 되면 톰캣같은 WAS 까지 예외가 전달되게 된다. WAS (여기까지 전파)  HttpServletResponse가 제공하는 sendError 라는 메서드가 있는데, 이를 호출하면 당장 예외가 발생하는 것은 아니지만 서블릿 컨테이너에게 오류가 발생했다는 점을 전달할 ..