Backend/Spring 36

INSERT / UPDATE 시 PK(auto_increment) 값 받아오기

getGeneratedKeys프로젝트시 myBatis를 사용하여, API 요청시 2개의 테이블을 Insert 해야한다. EX) Order라는 A 테이블과 OrderStatus라는 두개의 테이블이 존재한다.A라는 테이블은 OrderID라는 PK값을 가지고, B라는 테이블은 OrderStatusID라는 PK를 가진다.여기서 A테이블의 OrderID PK를 B테이블의 FK로 연결하지는 않았다.※ OrderID의 PK이므로 중복이 존재하지않기에 JOIN 및 서브쿼리를 사용이떄 하나의 API요청으로 두테이블은 모두 Insert하려한다. API 요청시 Order 테이블의 Insert로 OrderID의 PK(auto_increment)가 생성이될때,해당 PK값을 반환하여 OrderStatus 테이블을 Insert하려..

Backend/Spring 2023.04.25

@Transactional

시작하며 @Transactional JPA를 활용한 프로젝트를 개발하였지만, 깊이 있는 이해도는 없었다. 명확하게 설명하지 못한다면, 제대로 알고있는게 아니라 생각한다. 공부내용 정리글이다. Transactional 정의 데이터베이스에서 트랜잭션은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 단위는 더이상 쪼개질 수 없는 최소의 연산이다. Transactional 특징 원자성(Atomicity): 트랜잭션의 모든 작업이 완전히 성공하거나 완전히 실패하는 단일 단위로 처리되도록 보장하는 능력이다. 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다. 일관성(Consistency): 각 데이터 트랜잭션이 데이터베이스를 일관성 있는 상태에서 일관성 있는 상태로 이동해야 함..

Backend/Spring 2023.04.23

RESTful API

REST 구성 자원(Resource) - URI 행위(Verb) - HTTP Method 표현(Representations) REST 특징 자원(Resource) - URI를 통해 자원을 명시하고, HTTP 메소드를 사용하여 해당 자원에 대한 CRUD 작업을 수행합니다. 메시지(Message) - RESTful API에서는 HTTP 프로토콜의 메시지 포맷을 이용하여 요청과 응답을 처리합니다. 예를 들어, JSON, XML 등의 포맷을 사용할 수 있습니다. Stateless(무상태성) - RESTful API는 서버 측에서 상태 정보를 유지하지 않고, 요청에 대한 응답만 전달합니다. 이러한 특징을 가지기 때문에, 서버의 확장성과 성능을 높일 수 있습니다. 캐시(Cache) - RESTful API에서는 H..

Backend/Spring 2023.04.23

DTO / Entity / VO

Servlet => Spring => Spring Boot 순서로 공부를하며 DTO와 Entity의 차이점은 간략하게 파악하였다. 하지만 DTO와 VO는 어떠한 차이점이 있을까? 여러 참고 사이트를 비교하며 정리해본다. DTO(Data Transfer Object) DTO는 데이터를 전달하기 위한 객체이다. 계층간의 Getter / Setter를 이용하여 데이터를 주고 받는다. 여러 레이어에서 사용할 수 있지만, 주로 View와 Controller사이에서 사용한다. DTO는 Getter / Setter 메소드를 포함하고, 그 외의 비즈니스 로직은 포함하지 않는다. EX) public class MemberDto { private String name; private int age; public Strin..

Backend/Spring 2023.04.18

[스프링 MVC 1편]HTTP Response

HTTP ServletResponse 역할 HTTP 응답 메시지 생성 HTTP 응답코드 지정 헤더 생성 바디 생성 @WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header") public class ResponseHeaderServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //[status-line] response.setStatus(HttpServletResponse.SC_OK); //[res..

Backend/Spring 2023.04.06

[스프링 MVC 1편]HTTP Request

HTTP 요청 데이터 개요 주로 3가지 방법을 사용한다. GET - 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 예) 검색, 필터, 페이징 등에서 많이 사용 POST - HTML From content-type : application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20 예) 회원가입, 상품 주문, HTML Form 사용 HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용 => JSON, XML, TEXT 데이터 형식은 주로 JSON 사용 POST, PUT, PAATCH 등 사용 HTTP 요청 데..

Backend/Spring 2023.04.06

[스프링 MVC 1편]Servlet

Servlet 프로젝트 생성 @ServletComponentScan // 서블릿 자동 등록 @SpringBootApplication public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } @ServletComponentScan : 하위 패키지를 스캔하며 Servlet을 찾는다. @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service..

Backend/Spring 2023.04.06

[스프링 MVC 1편]동시요청 - 멀티스레드

스레드 애플리케이션 코드를 하나하나 순차적으로 실행하는것 자바 메인 메소드를 처음 실행하면 main이라는 이름의 스레드가 실행 스레드가 없다면 자바 애플리케이션 실행이 불가능 스레드는 한번에 하나의 코드 라인만 수행 동시 처리가 필요하면 스레드를 추가로 생성 다중요청시 요청1이 완료되기까지 요청2가 대기해야한다. 요청 마다 스레드를 생성하는 방법 요청마다 스레드 생성의 장단점 장점 동시 요청을 처리 할 수 있다. 리소스(CPU, 메모리)가 허용할때 까지 처리가능 하나의 스레드가 지연되어도, 나머지 스레드는 정상 동작한다. 단점 스레드는 생성비용이 매우 비싸다. 고객의 요청이 올때 마다 스레드를 생성하면, 응답 속도가 늦어진다. 스레드는 컨텍스트 스위칭 비용이 발생한다. 스레드 생성에 제한이 없다. 고객요..

Backend/Spring 2023.04.05

[스프링 MVC 1편]서블릿

서블릿 특징 urlPatterns(hello)의 URL이 호출되면 서블릿 코드가 실행 HTTP 요청 정보를 편리하게 사용 할 수 있는 HttpServletRequest HTTP 응답 정보를 편리하게 제공 할 수 있는 HttpServletResponse 개발자는 HTTP 스펙을 매우 편리하게 사용 서블릿 컨테이너 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고한다. 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤으로 관리 고객의 요청이 올 때 마다 계속 객체를 생성하는것은 비효율 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근 공유 변수 사용 주의 서블릿 컨테이너 종료시 함께 종료 JSP..

Backend/Spring 2023.04.05