| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- Domain Name Space
- AppArmor
- 스프링
- 슬라이딩 윈도우
- HTTP/2
- SlidingWindow
- 다이나믹 프로그래밍
- 리눅스
- HTTP/3
- spring
- 비트마스킹
- 깃허브
- Spring Boot
- 부팅 장애 대응
- network
- 로그 수집
- 알고리즘
- tcp
- TwoPointer
- Linux
- 네트워크
- 네트워크 관리 및 진단
- git
- 깃
- udp
- github
- 누적합
- bitmasking
- Prefix sum
- RLD
- Today
- Total
목록BackEnd/Spring (15)
kimgusxo 님의 블로그
1. 페이징(Paging)과 정렬(Sort)이란?페이징(Paging): 대량 데이터 조회 시 메모리/네트워크 부담을 줄이기 위해 일정 개수씩 잘라서 조회하는 방식정렬(Sort): 원하는 기준으로 데이터 순서를 정렬하는 것데이터가 수천, 수만 건이 넘을 때 한 번에 다 보여줄 수 없어 페이징과 정렬을 통해 해결한다.게시판 목록(페이지 번호, 최신순 정렬), 쇼핑목 상품 목록(가격순, 인기순 정렬) 등에 사용됨 2. Pageable과 Sort 인터페이스Spring Data JPA는 Pageable 인터페이스를 제공하여 페이징을 쉽게 사용가능하게 함.public interface Pageable { int getPageNumber(); // 현재 페이지 (0부터 시작) int getPageSize..
1. HTTP 메세지 컨버터란?HTTP 메세지(텍스트)를 Java 객체로 변환하거나 반대로 Java 객체를 HTTP 메세지로 변환해주는 역할 1-1. HTTP 메세지 컨버터 어노테이션어노테이션설명@RequestBodyHTTP 요청 본문을 자바 객체로 변환한다.@ResponseBody자바 객체를 HTTP 응답 본문으로 변환한다.@RestController위 두 어노테이션을 자동으로 적용하는 컨트롤러를 만든다. (이 어노테이션 사용 시 @ResponseBody 생략 가능) 1-2. 스프링의 기본 컨버터 종류컨버터역할MappingJackson2HttpMessageConverterJSON과 객체 사이의 컨버터 (Jackson 사용)StringHttpMessageConverter문자열로 데이터 처리ByteArra..
1. REST API란 무엇인가?1-1. REST(Representational State Transfer)란?자원을 URI로 표현하고HTTP 메소드로 동작을 정의하며상태는 서버가 유지하지 않는 구조 1-2. API(Application Programming Inteface)란?다른 시스템이 우리 시스템의 기능을 사용할 수 있도록 해주는 입구이다. 1-3. RESTful API 원칙항목설명자원의 표현/users, /order/1 같은 URI로 표현한다.메소드의 의미GET, POST, PUT, DELETE로 표현무상태성(Stateless)요청 간 상태를 저장하지 않음계층화 구조보안, 로드 밸런서 등을 계층 중간에 구성할 수 있다. 2. REST API 구현2-1. @RestController 기본 설정@R..
1. 실무에서 파일을 다루는 이유이미지를 업로드 하기 위해서 (프로필 사진, 상품 이미지 등)문서를 업로드하기 위해서 (PDF, 엑셀, 증빙자료 등)파일을 다운로드 하기 위해서 (보고서, 첨부파일 등)-> 파일을 다룰 땐 보안과 저장 위치, 응답 방식의 세심한 고려가 필요하다. 2. 파일 업로드 기본 구조Spring Boot는 MultipartResolver를 통해 multipart/form-data 요청을 자동으로 변환해준다.HTML Form (multipart/form-data) → DispatcherServlet ↓CommonsMultipartResolver 또는 StandardServletMultipartResolver ↓MultipartFile → Controller 매개변수로 전달 2-..
1. Validation이 필요한 이유"올바르지 않은 값이 시스템을 망친다."사용자가 의도치 않게 잘못된 데이터를 보내는 경우악의적인 공격(SQL Injection, 파라미터 변조 등)DB 무결성, 비즈니스 로직 훼손위와 같은 경우 에러가 발생하여 그것을 막기위해 서버 단에서 "입력값 검증"을 해야한다. 1-1. Bean Validation이란?JSR-303(Bean Validation 1.0) -> JSR-380(Bean Validation 2.0)에서 추가된 검증 어노테이션javax.validation 패키지를 기반으로 함스프링 부트는 Hibernatew Validator를 기본 구현체로 내장 2. @Valid와 @Validated@Valid자바 표준 JSR-380 어노테이션 (javax.valida..
1. 예외(Exception)란?프로그램 실행 중 예상치 못한 상황이 발생했을 때의 신호인증 실패, 존재하지 않는 ID 조회, Null값 접근 등예외를 처리하지 않으면 프로그램이 중단스프링 MVC에서는 컨트롤러 내부에서 예외가 발생하면 500 Error를 발생시킨다. 1-1. 예외처리 전략이 필요한 이유예외 메세지가 사용자에게 그대로 노출될 수 있음. -> 사용자 혼란, 보안 문제 야기클라이언트가 어떤 상태인지 알 수 없음 -> JSON 응답이 일관되지 않음예외 유형마다 다른 방식으로 처리 -> 유지보수가 매우 어려워짐 2. 스프링에서 예외 처리2-1. 예외를 처리하는 3가지 레벨@ExceptionHandler: 개별 컨트롤러 수준, 해당 컨트롤러에서만 예외 처리@ControllerAdvice: 전역 처..
1. 필터와 인터셉터 흐름 2. Filter: 서블릿 컨테이너 단계의 전처리기2-1. 필터란?javax.servlet.Filter 인터페이스 기반Tomcat/WAS 레벨에서 동작한다.스프링이 아닌 서블릿 API에서 제공보안, CORS, 로깅 등의 용도로 주로 사용한다.스프링 빈에 접근은 불가하다. 2-2. 필터 구현public class LogFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { Sy..
1. DispatcherServlet(= 모든 요청의 입구)Spring MVC의 Front Controller모든 요청을 받아서 알맞은 구성요소로 분배(dispatch) 한다. 1-1. DispatcherServlet의 역할요청 수신: 모든 HTTP 요청을 가로챔핸들러 탐색: 어떤 컨트롤러가 처리할지 결정한다.실행 위임: 컨트롤러를 실행하고 결과(ModelAndView)를 수신뷰 렌더링 위임: 결과 뷰를 ViewResolver 통해서 결정하고 실행한다. 1-2. DispatcherServlet 내부 코드protected void doDispatch(HttpServletRequest request, HttpServletResponse response) { HandlerExecutionChain han..
1. 서블릿(Servlet)이란?서블릿은 자바에서 제공하는 웹 어플리케이션 구성 요소클라이언트의 HTTP 요청을 처리하고 HTTP 응답을 생성한다.파일 다운로드, HTML form, JSON 등 다양한 포맷의 통신 용도로 사용한다.@WebServlet("/hello")public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().write("Hello from Servlet!..
1. 트랜잭션(Transaction)이란?트랜젝션은 하나의 작업 단위를 의미하며 이 단위는 반드시 모두 성공하거나 모두 실패해야한다.데이터의 일관성, 안정성, 무결성을 지키는 도구이며 스프링에서는 @Transactional로 간단하게 처리한다.대표 예: 계좌이체는 출금+입금 모두 성공해야 하는 것, 하나라도 실패하면 모두 취소해야한다. 1-1. 트랜잭션의 4대 속성 (ACID)원자성(Atomicity): 전부 성공하거나 실패해야 한다.일관성(Consistency): 무결성이 보장되어야 한다.격리성(Isolation): 다른 트랜잭션간 간섭이 불가능 해야한다.지속성(Durability): 성공한 트랜잭션은 영구적으로 반영되야 한다. 2. 스프링에서의 트랜잭션스프링은 @Transactional을 통해 트랜잭..
1. AOP란?."관점 지향 프로그래밍"으로 핵심 로직 외의 반복되는 부가 기능(cross cutting concerns)을 공통된 영역(aspect)으로 분리해서 관리하는 프로그래밍 패러다임이다.로그 남기기, 트랜잭션 처리, 시간 측정 등에 사용된다. 1-1. 기존 방식 문제점public class MemberService { public void join(Member member) { long start = System.currentTimeMillis(); try { repository.save(member); } finally { long end = System.currentTimeMillis(); ..
1. 빈의 생명주기란?스프링에서는 객체의 생성 -> 의존성 주입 -> 초기화 -> 사용 -> 소멸의 흐름을 자동으로 처리한다.하지만 빈 내부에서 자원 초기화(DB 커넥션 열기), 종료 처리(커넥션 닫기) 등을 직접 다뤄야 할 때가 있다.그때 필요한 것이 바로 스프링 빈 생명주기 콜백이다. 2. 스프링 빈 생명주기 전체 흐름빈 클래스 탐색: @ComponentScan 또는 @Bean 메소드로 등록인스턴스 생성: 기본 생성자 또는 생정자 주입 방식으로 객체 생성의존성 주입: @Autowired, 생성자/필드/세터 방식초기화 콜백: @PostConstruct, InitializingBean.afterPropertiesSet()소멸 콜백: @PreDestory, DisposableBean.destroy() 3...
1. 빈(Bean)이란?스프링 컨테이너가 생성하고 관리하는 객체즉, 단순히 자바 객체지만 스프링이 책임지고 만들고 관리해주는 객체를 "빈"이라 한다.빈은 싱글톤 패턴을 가지며 thread-safe하게 설계되어야된다.@Componentpublic class MyService {}위 클래스는 컴포넌트 스캔을 통해 스프링 컨테이너가 자동으로 객체를 생성MyService클래스는 ApplicationContext 내부에서 등록된 빈으로 관리된다. 2. 컴포넌트 스캔(ComponentScan)이란?스프링은 객체를 직접 생성하지 않아도 되도록 컨테이너가 대신 관리해주는 프레임워크이다.즉, 이 "관리"의 출발점이 클래스를 탐색하고 등록하는 것이다. 2-1. 컴포넌트 스캔의 동작방식@SpringBootApplicatio..
1. 객체지향 프로그래밍1-1. 객체지향의 핵심 원칙 중 하나: 높은 응집도, 낮은 결합도응집도: 각 클래스가 자신의 역할에 충실한가?결합도: 서로 얼마나 밀접하게 연결되어 있는가?// 높은 결합도 예시public class OrderService { private final PaymentService paymentService = new PaymentService();}OrderService는 항상 PaymentService에 종속됨테스트가 어렵고 구현체 변경이 어려운 문제가 발생 2. 제어의 역전(IoC)의 등장IoC(Inversion of Control)란 객체 생성과 의존성 연결을 개발자가 아니라 프레임워크(컨테이너)가 대신 처리하는 것즉 "제어의 주체가 뒤바뀐다" 2-1. 기존 구조Orde..
1. 스프링 이전 시대의 자바 개발1-1. 자바의 복잡성자바는 강력한 OOP 언어지만 코드보다 설정과 반복 작업이 많다.문제 1: 객체를 직접 설정하고 연결해야한다.객체 간 강한 결합을 가져 변경 및 테스트가 어렵다.문제 2: 객체 생명주기 관리가 안된다.DB 커넥션을 언제 닫을지, 외부 API를 언제 초기화할지 개발자가 수동으로 관리해야한다.문제 3: 중복 코드와 설정 지옥XML파일과 인터페이스/구현체/팩토리/서비스를 조립함으로 엄청난 생산성이 저하된다. 1-2. 그래서 등장한 프레임워크들StrutsMVC 패턴 제공 -> 웹 프레임워크하지만 의존성 주입, 트랜젝션, AOP는 별도로 처리해야 하는 단점 존재.HibernateORM(Object-Relational Mapping) 처리DB 접근은 쉽게 하지..