Programming 65

Java8에는 어떤것들이 바뀌었나?

Java8이 출시하고 많은 변화를 겪었다고 하여 Java8을 기준으로 전 후를 알아보고 싶었다.Lambda expression(람다 표현식)Functional interface(함수형 인터페이스)Default method(디폴트 메서드)Stream(스트림)Optional(옵셔널)새롭게 추가된 날짜 APICompletableFuture(컴플리터블 퓨처)JVM의 변화 1. lambda 표현식Java8때 출시한 lambda 표현식에 대해서 먼저 알아봤다.lambda가 탄생하게된 목적이 무엇일까? lambda 표현식이란 하나의 메소드를 하나의 식으로 표현한것이다.처음엔 저 한 문장이 이해가 안갔다. Java8이전에 있었던 '익명함수'라는 놈을 살펴보면 익명함수란 함수에 이름을 붙이이 않고 바로 정의해서 사용하는..

IoC 디자인 원칙과 스프링 프레임워크

IoC는 디자인 원칙이다.스프링 프레임워크는 IoC디자인 원칙을 따르고 있다. IoC 원칙을 구현하기 위해 스프링은 *IoC컨테이너를 제공하고 이 컨테이너의 핵심 인터페이스는 BeanFactory이다.*(IoC컨테이너는 실제 구현되어있는 클래스나 인터페이스가 아닌 개념에 가깝다. IoC컨테이너를 제공한다는것은 IoC컨테이너라는 개념을 구현한 실제 인터페이스와 구현체를 제공한다는 것이다.)스프링에서 제공하는 대표적인 IoC 컨테이너에는 BeanFactory라는 인터페이스가 있다. IoC 원칙을 적용해서 객체 생성, 의존성 주입, 빈 생명주기 관리 등을 수행한다. 가장 기본적인 스프링 IoC컨테이너이자, 경량 컨테이너이다. 이 인터페이스의 대표적인 구현체로는 DefaultListableBeanFactory가..

Programming/Spring 2025.01.11

자바에서 가장 많이 호출되는것은 무엇일까

자바에서 가장 많이 호출되는 클래스는 사용자의 코드와 환경에 따라 다를 수 있지만, 일반적으로 핵심 Java API 클래스들이 가장 많이 호출됨. 그중에서도 아래 클래스들이 자주 호출됨: 1. java.lang 패키지이 패키지의 클래스는 기본적으로 import 없이 사용되므로 매우 자주 호출됨. • String:• 문자열 처리와 관련된 작업에 사용. • 예: System.out.println("Hello");에서 문자열 리터럴 "Hello"가 포함됨. • Object: • 모든 클래스의 최상위 부모 클래스. • 객체 생성, 비교, 해시코드 계산 등에서 자주 호출됨. • 예: equals, hashCode, toString 메서드. • Math: • 수학적 계산(예: Math.sqrt, Math.pow)에..

동시성 제어란

동시성 제어란 여러 작업(요청, 쓰레드, 사용자 등)이 동시에 동일한 자원(데이터, 파일 등)을 사용할 때 발생할 수 있는 문제를 예방하고 올바르게 처리하는 방법 문제 상황 예시1. 친구와 같이 피자를 먹음2. 동시에 마지막 조각 먹는다 선언 후 둘다 라스트 피스에 접근3. 누가 먹었는지 헷갈림--> 동시성 제어는 이런 혼란을 방지하는 규칙을 세우는 것.  Mysql을 이용한 동시성 이슈 해결방법PessimisticLockOptimisticLockNamedLock Redis를 이용한 동시성 이슈 해결방법LettuceLockRedissonLock 동시성 제어란 여러 작업이 같은 데이터를 동시에 처리하려고 할 때, 데이터 충돌이나 혼란을 방지하는 기술

Programming/Spring 2025.01.02

이메일 인증 구현하기

이메일 인증을 구현해보자. 이메일 인증을 구현하기 위한 단계는 다음과 같다.1. 사용자가 이메일을 입력 -> 인증버튼을 클릭 -> 서버에서 인증코드 생성 & 이메일 발송 & Redis 저장2. 사용자가 인증코드 입력 -> 서버로 전송 -> Redis에 저장된 코드와 비교 -> 일치하면 "이메일 인증 완료" 처리3. 그 후 회원가입 완료 API 호출 1. Redis 연동 설정1-1 build.gradleimplementation 'org.springframework.boot:spring-boot-starter-data-redis'1-2. application.ymlspring: redis: host: 127.0.0.1 port: 6379 password: "" # 비밀번호가 있다면 ..

Programming/Spring 2024.12.31

EntityFinder에 대한 고찰

엔티티를 가져오기위해 ID를 조회하는 로직이 많고 반복됨. EntityFinder라는 클래스를 만들어서 공통 기능을 분리하여 중복을 제거하기로함.사용하다보니 이 헬퍼클래스만으로 다양한 곳에서 사용될 경우 변경 전파의 위험성을 인지하게 됨. 또한 데이터 존재 여부와 조회의 역할을 서비스에서 해주는게 맞는가라는 생각이 듬. 고민을 하다 BaseRepository를 만들어서 모든 레포지토리가 BaseRepository의 인터페이스를 상속하여 변경 전파의 리스크도 줄이고 책임을 분리시키기로함.import org.springframework.data.jpa.repository.JpaRepository;import java.util.Optional;public interface BaseRepository exten..

Programming/Spring 2024.12.24

ResponseDTO의 목적

ResponseDTO(Data Transfer Object)를 사용하는 주된 목적 중 하나는 백엔드와 프론트엔드 간의 명확하고 효율적인 데이터 전달을 보장하는 것입니다. 이를 통해 양측 간의 협업이 원활해지며, 여러 가지 이점이 있습니다. 좀 더 구체적으로 설명드리자면:1. 명확한 계약 정의ResponseDTO는 백엔드와 프론트엔드 간의 데이터 계약을 명확히 정의합니다. 이는 양쪽 개발자가 어떤 데이터를 주고받는지 명확히 이해할 수 있게 하며, 변경 시 영향 범위를 쉽게 파악할 수 있게 도와줍니다.2. 데이터 보안 및 캡슐화직접적으로 엔티티(Entity)나 도메인 모델을 클라이언트에 노출시키는 것은 보안상 위험할 수 있습니다. ResponseDTO를 사용하면 클라이언트에 필요한 정보만 선택적으로 노출할 ..

Programming/Spring 2024.12.07

빈(Bean)이 뭔데?

스프링을 공부하고 프로젝트를 하다보면 Bean이라는 단어가 많이 나오는데 정확히 뭔지 궁금해짐. Bean은 한마디로 정의하면 스프링 컨테이너가 관리하는 객체임. Q. 그냥 객체랑 스프링 컨테이너가 관리하는 객체는 다른건가?A. 그렇다. 그냥 객체는MyComponent myComponent = new MyComponent(); 와 같이 개발자가 new 키워드를 사용해 직접 생성하는거임.객체의 생성, 소멸, 의존성 주입 등을 개발자가 수동으로 처리함. 반면에 스프링 컨테이너가 관리하는 객체(Bean)는 스프링이 객체의 생성, 초기화, 의존성 주입, 소멸을 모두 자동으로 처리함. Q. 스프링 컨테이너는 뭔가? 그리고 빈은 어떻게 등록하는가? A. 스프링 컨테이너는 간단히 말해 빈을 관리하는 관리자임. 주요 기..

Programming/Spring 2024.11.22

어노테이션 정리

@Controller역할: 클라이언트의 요청을 받아 **뷰(HTML 페이지)**를 반환하는 역할.예: 로그인 폼이나 회원 가입 페이지를 보여줄 때.@RestController역할: 클라이언트의 요청에 대해 JSON, XML 데이터를 바로 응답하는 역할.예: REST API를 만들 때 사용.@RequestMapping역할: 요청 URL을 특정 메서드와 연결하는 역할.예: "/users" 요청이 오면 해당 메서드를 실행.@RequestParam역할: 요청 URL이나 폼에서 전달된 파라미터 값을 메서드 변수에 바인딩.예: ?id=123 요청에서 id 값을 메서드에 전달.@ModelAttribute역할: 폼 데이터를 객체로 바인딩하거나, 뷰에 기본 데이터를 전달.예: 사용자 입력 데이터를 User 객체로 변환...

Programming/Spring 2024.11.22

서블릿과 JSP

@WebServlet: Controller + RequestMapping 서블릿 생명주기 맵핑이란?매핑(mapping)은 클라이언트가 요청한 URL을 기반으로 해당 요청을 처리할 수 있는 코드나 로직(핸들러)을 연결하는 과정을 말한다. 웹 애플리케이션에서 매핑은 클라이언트 요청이 들어왔을 때, 그 요청에 해당하는 결과를 제공하기 위해 적절한 컨트롤러 메서드나 서블릿을 찾아 실행하는 역할을 한다. 네가지 저장소page conextapplicationsession (편리하지만 메모리부담이 제일큼)request 객체 (제일 부담 적음)    HTTP는 무상태임 독립성과 확장성을 위해서 상태정보를 저장하지 않음.저장하려면 쿠키, 세션 등이 필요한데 세션은 클라이언트마다 한개씩 있는 개별저장소임.

Programming/Spring 2024.11.21