2024/12 10

[Java] Java 버전에 따른 핵심 변경 사항 (Java8)

Java는 크게 Java8, Java11, Java17 에서 핵심 기능이 변경되었다.먼저 Java8의 핵심 변경 사항부터 알아보자.🤍 Lambda Expression (람다식)람다식은 익명함수를 정의하는 간결한 방법이다. 즉, 이름이 없는 함수를 표현하기 위한 문법이다.기본 문법 (매개변수) -> {실행코드}사용람다식은 함수형 인터페이스을 통해 사용됨함수형 인터페이스메소드가 하나만 존재하는 인터페이스@FuctionalInterface 애노테이션함수형 인터페이스임을 명시적으로 표현🤍Stream AP스트림(Stream)스트림은 데이터의 흐름이다.스트림은 한 번만 소비할 수 있다.스트림의 특징선언적 프로그래밍: '무엇을 할 것인가'에 집중하며, '어떻게 구현할 것인가'는 신경쓰지 않음.원본 데이터를 변경하..

[JavaScript] JS 기초 중에서 기초, DOM 구조에 대해서 알아보자

사이드 프로젝트를 진행하며 프론트에 백엔드 api를 연동하려고 하니document라는 객체를 상당히 자주 사용하게 되었다.document라는 객체는 무엇일까? 이 객체를 알기 위해선 DOM 구조 먼저 알아야한다. 🤍DOM(Document Object Model)이란?HTML 문서를 브라우저가 읽었을 때, JavaScript가 접근하기 쉬운 객체 구조로 변환한 것을 DOM이라고 한다.  안녕하세요 저는 LazyCat입니다.위에 HTML 문서를 브라우저가 읽으면 아래와 같은 DOM 구조로 변환된다. document       ㄴhtml               ㄴhead                      ㄴtitle               ㄴbody                      ㄴ..

[Git] Git의 3가지 영역

🤍Git의 3가지 영역 Working Directory (= Working tree)설명: 개발자의 작업 공간파일 상태: Untracked -> Modified Staging Area설명: 커밋이 되기 전에 변경된 파일들을 모아두는 임시 영역Working Directory에서 git add 명령어를 통해 파일을 이동시킬 수 있음파일 상태: Staged Repository설명: 최종적으로 파일이 커밋되어 버전 이력으로 저장되는 공간git commit 명령어를 통해 옮겨진 파일들파일 상태: Committed

JPA의 변경감지를 이용한 회원 수정 메소드 변경

🤍JPA의 '변경감지'란?영속성 컨텍스트에 의해서 관리되는 엔티티들은, 별도의 save 메소드를 호출하지 않고도 엔티티의 상태가 변경되면 자동으로 DB에 반영됩니다.또한 변경감지는 @Transactional 내에서 작동합니다. 🤍@Transactional 이 필요한 이유@Transactional은 트랜잭션의 시작과 종료를 관리하며, JPA의 변경 감지(Dirty Checking)가 제대로 작동하도록 보장합니다. 트랜잭션이란?- 여러 작업을 하나의 작업 단위로 묶음- ACID(Atomiciy, Cosistency, Isolation, Durability) 속성 보장- 작업 중 예외 발생시 롤백 처리 영속성 컨텍스트란?- JPA에서 엔티티를 관리하는 캐시 영역- 엔티티가 영속성 컨텍스트에 들어오면 영속상..

[Spring] HandlerMethodArgumentResolver

🤍 HandlerMethodArgumentResolver 인터페이스Spring MVC에서 컨트롤러 메소드의 매개변수를 동적으로 바인딩하기 위해 사용되는 인터페이스입니다.  🤍 사용 목적Spring MVC는 HTTP 요청이 컨트롤러로 들어올 때, 요청 데이터를 기반으로 컨트롤러 메서드의 매개변수를 생성하고 주입하는데, 이 과정에서 기본 제공되는 바인딩 로직 외에 사용자 정의 로직을 추가하고 싶을 때 이 인터페이스를 사용합니다. 간단히 말해서, 지원하지 않는 매개변수 바인딩 로직을 구현하기 위해 사용됩니다. 🤍 주요 메소드1. supportsParameter(MethodParameter parameter)특정 매개변수가 이 리졸버에 의해 처리될지 결정한다true 반환 시, 해당 매개변수는 이 리졸버에서..

회원가입 API 중복 요청 방지: Redis를 활용한 해결법

🤍 문제상황회원가입 버튼을 두번 연속으로 눌렀다가, 쿼리가 두번 연속으로 날아가며 중복된 email값이 데이터베이스에 저장됨.중복된 email 데이터로 인해 로그인 시 오류가 발생함  🤍 해결방법 : Redis회원가입 비즈니스 로직이 실행되는 순간, 이메일이 Redis에 10분간 저장되도록 코드 추가 public void signUp(SignupRequestDto signupRequestDTO){ String email = signupRequestDTO.getEmail(); //이메일 중복검사 isEmailDuplicate(email); //요청 중복 방지 isRequestDuplicate(email); //비밀번호 암호화 String passw..

@AllArgsConstructor 와 @Builder

🤍 @AllArgsConstructor모든 필드를 파라미터로 받는 생성자를 자동으로 생성합니다.따라서, 모든 필드를 한 번에 초기화해야 합니다. @AllArgsConstructorpublic class SignupRequestDto { private String name; private LocalDate birth; private String email; private String firstAddress; private String secondAddress; private String password;}// 모든 필드를 한번에 초기화한 객체SignupRequestDto dto = new SignupRequestDto("레이지캣", LocalDate.of(1990, 1, ..

[Spring] 스프링의 Collection Injection

🤍 Collection Injection스프링은 자동으로 타입에 맞는 Bean을 찾아서 주입해주는 기능이 있다. Map와 같이 Map으로 선언하면 AbstractTemplate의 구현체들을 모두 찾아서 key값으로 구현체의 빈 이름을, value 값으로 구현 객체를 담아 주입해준다. List도 마찬가지다. AbstractTemplate의 구현체들을 List에 담아 주입해준다. 이것을 Collection Injection 이라고 한다.  🤍 트러블 슈팅문제상황 AbstractOAuthTemplate의 구현체들을스프링 빈으로 등록 후 Map에 추가하여"naver"와 "kakao"라는 문자열을 받으면 구현객체를 반환하고자 함 그러나 Service코드에서 "naver"를 받으면 null 값을 반환함.  원인..

DTO와 엔티티의 역할, 비즈니스 로직의 위치

🤍DTO와 엔티티 역할의 차이1. DTO의 역할데이터 전달 객체: 주로 클라이언트와 서버 간, 계층 간 데이터를 전달하는데 사용됩니다.얇은 계층 객체: 데이터 전달과 유효성 검사만 담당하며, 비즈니스 로직은 포함하지 않습니다.2. 엔티티의 역할도메인 객체: 데이터베이스와 매핑되며, 비즈니스 로직과 데이터를 함께 포함합니다.상태와 행위 관리: 상태의 유효성을 보장하고, 필요한 상태 변경 로직을 포함합니다. 🤍프로젝트 코드 리팩토링 방향 회원가입 DTO에서 회원 Entity로의 변환을 돕는 비즈니스 로직이 포함되어있는 상태이다. 그러나 DTO에 toEntity()를 포함하게 된다면,단일 책임 원칙(SRP) 위반: 데이터 전달과 객체 변환이라는 두 가지 책임을 지게 된다.DTO와 엔티티의 강한 결합: DT..

[Spring] Mock 테스트

🤍소프트웨어 테스트1. TDD (Test-driven development)개발 전 테스트 코드를 먼저 작성하는 방식을 의미한다. 2. 왜 TDD를 사용해야 할까?테스트를 잘 작성하기 위해선,  모든 요구 사항에 대한 철저한 점검이 필요하기 떄문이다!시스템 전반적인 설계 향상개발 집중력 향상3. 테스트 종류테스트 종류범위 대상속도도구/기법단위 테스트작은 단위(메소드, 클래스)개별 로직빠름JUnit, Mockito 통합 테스트모듈 간 상호작용여러 모듈(컨트롤러 - 서비스 등)보통Spring Boot Test시스템 테스트애플리케이션 전체애플리케이션 전체느림  1. 단위테스트(Unit Test)개별 메소드, 클래스 등 작은 단위가 예상대로 동작하는지 검증가장 작은 테스트 단위Mock 객체를 활용해 외부 의존..

반응형