java 96

[Java] HttpServletRequest

Servlet API의 일부, 클라이언트에서 서버로 들어오는 HTTP요청 정보를 캡슐화하여 제공하는 인터페이스웹 애플리케이션에서 HTTP 요청을 처리할때 오청의 헤더, 파라미터, 메서드(GET, POST 등), 쿠키, 세션정보를 확인할 수 있도록 다양한 메서드를 제공 HttpServletRequest 주요 메서드와 속성1. 요청 메서드 확인String getMethod()클라이언트가 사용한 HTTP메서드 (GET, POST, PUT 등)를 반환한다2. 요청 URL과 URIString getRequestURI()요청된 리소스의 경로를 반환한다 (예 : /example/path)StringBuffer getRequestURL()요청된 전체 URL을 반환한다 (예 : http://example.com/exam..

BE/Java 2025.01.08

[Java] Jackson 라이브러리

Java객체와 JSON간의 직렬화 및 역직렬화를 간단하고 효율적으로 처리할 수 있는 라이브러리주로 Spring Boot와 같은 프레임워크에서 JSON데이터를 처리하는데 기본적으로 사용된다Jackson 어노테이션과 주요 속성 1. @JsonPropertyJSON 속성과 Java 필드 간의 매핑을 설정.주요 속성:value: JSON 속성 이름을 설정.required: 필드가 JSON 데이터에 필수인지 여부를 설정.access: 직렬화/역직렬화 접근 수준(READ_ONLY, WRITE_ONLY, READ_WRITE). 2. @JsonIgnore특정 필드를 JSON 직렬화 및 역직렬화에서 제외.이 필드는 JSON에 포함되지 않음. 3. @JsonIgnoreProperties여러 필드를 한 번에 무시.주요 속성..

BE/Java 2025.01.07

[프로그래머스 / Java] [level 0] 특별한 이차원 배열 1

문제 설명정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.arr[i][j] (0 ≤ i, j  n)의 값은 i = j라면 1, 아니라면 0입니다.제한사항1 ≤ n ≤ 100입출력 예nresult3[[1, 0, 0], [0, 1, 0], [0, 0, 1]]6[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]]1[[1]]제출 답안 :class Solution { public int[][] solution(int n) { int[][] an..

Etc./개인공부 2025.01.07

[JPA] N + 1 문제

데이터베이스와 관련된 성능 이슈로, JPA나 ORM을 사용할때 자주 발생한다한번의 쿼리로 해결할 수 있는 작업이 여러번의 쿼리로 나뉘어 실행되면서 성능 저하를 유발하는 문제 동작 과정1. 1개의 쿼리 실행먼저 1 에 해당하는 쿼리를 실행해 특정 엔티티의 리스트를 가져온다예 : SELECT * FROM orders; (주문 데이터를 조회)2. N개의 추가 쿼리 실행가져온 각 엔티티와 연관된 데이터를 조회하기 위해 N개의 추가 쿼리가 실행된다예 : 각 주문에 연관된 고객 데이터를 가져오는 쿼리예제 및 동작 설명Order 와 Customer 관계 (@ManyToOne) :@Entitypublic class Order { @Id @GeneratedValue private Long id; @..

BE/Java 2025.01.06

[Spring Boot] PSA

스프링 프레임워크가 소프트웨어 아키텍처 설계에 기반하여 따르는 핵심 원칙(Principles)과 유연성(Flexibility)을 의미사용자가 원하는 방식으로 자유롭게 애플리케이션을 설계하고 구현할 수 있는 기반을 제공 주요원칙1. 선택과 유연성 (Choice and Flexibility)스프링은 강제적인 사용법 대신 다양한 선택지를 제공예 : XML설정, Java Config, 어노테이션 기반 설정 모두 지원2. POJO 기반 개발 (Plain Old Java Object)스프링은 비즈니스 로직이 특정 프레임워크나 기술에 종속되지 않도록 POJO로 개발을 장려함3. Non-Invasive Programming Model스프링은 비침투적 방식으로 설계되어, 특정 프레임워크에 종속적인 코드를 최소화한다즉, ..

[Spring Boot] AOP

관점 지향 프로그래밍프로그램의 핵심 로직과 공통적으로 사용되는 기능(횡단 관심사)을 분리하여 코드를 더 간결하고 유지보수하기 쉽게 만드는 프로그래밍 기법스프링에서 AOP는 애플리케이션 전반에 걸친 공통 로직을 캡슐화 하는데 사용 주요 개념1. 횡단 관심사 (Cross-Cutting Concern)여러 클래스나 메서드에서 반복적으로 나타나는 공통 기능예 : 로깅, 트랜잭션 관리, 보안 검사 등2. 핵심 관심사 (Core Concern)애플리케이션의 주요 비즈니스 로직3. AOP의 역할횡단 관심사를 핵심 관심사에서 분리하여 모듈화코드 중복을 줄이고 비즈니스 로직에만 집중할 수 있도록 돕는다AOP에서 사용하는 주요 용어1. Aspect횡단 관심사를 모듈화한 코드 단위예 : 로깅 기능을 캡슐화한 모듈2. Joi..

[Java] Generic 제너릭

Java의 클래스, 메서드, 인터페이스에서 사용할 데이터 타입을 일반화하여 유연성과 코드 재사용성을 높이기 위한 기능타입을 미리 지정하지 않고 나중에 사용할 때 타입을 명시적으로 정의하는 방법 사용하는 이유1. 타입 안정성 보장잘못된 타입을 사용하는 실수를 컴파일 시점에서 방지예 : String만 들어가야 할 리스트에 Integer가 들어가지 않도록 방지2. 형변환의 간소화제너릭을 사용하면 데이터 타입을 미리 명시하므로 명시적 형변환이 필요없음코드가 간결하고 가독성이 높아짐3. 코드 재사용성다양한 데이터 타입에 대해 동일한 로직을 처리하는 코드를 작성 가능제너릭 기본 문법제너릭 클래스 :// T는 타입 파라미터로, 나중에 실제 데이터 타입으로 대체됨public class Box { private T..

BE/Java 2025.01.04

[Spring Boot] DTO

DTO (Data Trsnfer Object)데이터 전송객체, 시스템 간 데이터를 주고받을 때 사용하는 객체주로 계층 간 데이터를 전달하거나 데이터를 캡슐화하여 전송하는데 사용됨 특징1. 데이터 전송 목적데이터베이스, 서비스, 컨트롤러 등 여러 계층 간 데이터를 전달하기 위해 사용함2. 필드와 Getter, Setter 만 포함비즈니스 로직은 포함하지 않으며, 단순히 데이터를 저장하고 전달함3. Immutable 또는 Mutable일반적으로 DTO는 불변객체로 만들어지는 경우가 많다하지만 필요에 따라 Setter를 제공하여 Mutable하게 구현하기도 한다 사용하는 이유1. 계층 간 데이터 전달컨트롤러, 서비스, 데이터베이스 등의 계층 간 데이터를 전달하는 표준화된 객체로 사용2. 보안성 및 안정성도메인..

[Java] enum

열거형, 서로 관련된 상수들의 집합을 정의할 때 사용하는 데이터타입값이 고정된 상수 집합을 다룰 때 가독성을 높이고 오류를 줄이는데 유용1. enum의 기본 구조public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}enum은 클래스처럼 보이지만, 고정된 상수 값을 가지는 특별한 데이터 타입이다각 상수는 대문자로 작성하는것이 관례enum값은 기본적으로 0부터 시작하는 정수 값(ordinal)으로 관리된다2. enum 사용방법1) 기본사용public class Main { public static void main(String[] args) { Day today = Day.MONDAY; ..

BE/Java 2025.01.01

[Spring Boot, JPA] 관련 어노테이션

1. 엔티티(Entity)관련 어노테이션@Entity이 클래스가 JPA에서 관리되는 엔티티임을 선언데이터베이스 테이블에 매핑된다주의사항 : 반드시 기본 생성자 (public or protected)가 필요하다@Entity가 붙은 클래스는 final일 수 없다@Entitypublic class User { @Id @GeneratedValue private Long id; private String name;} @Table엔티티 클래스와 매핑될 데이터베이스 테이블을 지정한다기본적으로는 클래스 이름을 테이블 이름으로 사용하지만, 커스텀 이름을 지정할 때 사용한다속성 :name : 매핑할 테이블 이름schema : 스키마 이름catalog : 카탈로그 이름uniqueConstraints :..