본문 바로가기

Backend/Spring

(6)
[multipart/form-data] - MultipartFile과 JSON 함께 받기 (HttpMediaTypeNotSupportedException가 발생하는 이유) 이슈발생 Content-Type을 'multipart/form-data'로 설정한 HTTP 요청의 응답으로 415 Unsupported Media Type (HttpMediaTypeNotSupportedException)이 발생하였다. '파일'과 '복잡한 정보'를 함께 받아야하는 상황이었어서 "복잡한 정보를 JSON 구조로 파일과 함께 보내면 되지 않을까?"란 단순한 생각으로 한 메서드 설계가 원인이었다. 물론 파일과 정보파라미터들을 일반적인 form 형태로 전달해도 되겠지만 file과 JSON을 동시에 받을 수 없을까?란 의문을 해결하고자 한다. 따라서 스프링 MVC에서 Http Message를 어떻게 처리하는지 간단하게 살펴보고 과연 file과 json 데이터를 동시에 받는 작업은 정말 불가능한 일인..
[Spring Security] session 동시 접속자 수 제한 Spring Security 스프링시큐리티는 스프링 기반 웹 어플리케이션에서 '보안'(security)구현을 위한 구조를 제공해주는 프레임워크이며 인증(Authentication)과 인가(Authorization)을 포함한 다양한 기능을 제공한다. 공개되지 않은 어플리케이션 정보에 접근하고자 하는 사용자는 인증이 필요하다. 웹어플리케이션에서 인증된 사용자의 정보는 세션(Session)이나 , JWT(JSON Web token)을 통해 관리할 수 있으며 스프링 시큐리티에서는 이와 관련한 여러 인터페이스를 지원한다. 개발중인 웹 어플리케이션에서 인증 / 인가 기능을 구현하기 위해 스프링 시큐리티를 사용하였는데 로그아웃 후 재 로그인을 하였을 때 로그인이 안되는 현상이 발생하여 스프링 시큐리티 설정하는 방법을..
[환경 설정] 데이터 베이스 (DB) (H2) 1. 스프링 부트의 환경설정 Spring Boot에서는 외부 설정파일(application.properties 또는 application.yml)을 사용하여 Application에 필요한 환경정보를 설정할 수 있다. 2. 데이터 베이스 설정 DB 연결 정보는 아래와 같이 설정한다. spring: datasource: url: jdbc:h2:tcp://localhost/D:/h2/anywhere username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create-drop ... reference - https://spring.io/guides/gs/accessing-data-mysql/ 2-1. H2 사용하기 Jav..
스프링 웹프로젝트 간편 생성 - spring initializr 사용하기 1. 스프링부트 시작하기 Spring initializr page - 스프링 부트 프로젝트를 간편하게 생성하도록 돕는 웹 사이트 https://start.spring.io/ 2. 의존성 설정 dependencies [Default Set] Spring Web - Spring MVC를 사용해 web application 기능 지원 (기본 내장 서버로 tomcat 을 사용) Spring Data JPA - JPA 관련 편의 기능을 제공하고 JPA 를 활용해 Database 접근 및 데이터 저장 H2 Database - 여러 데이터베이스 유형 중 하나, 개발용으로 많이 사용 Thymeleaf - Springboot에서 공식적으로 사용을 권장하는 템플릿 엔진 Lombok* - 개발의 편의성을 올려주는 라이브러리..
[JPA] JPA를 통한 데이터 조회 (Entity, DTO) JPA를 통한 데이터 조회 JPA(Jakarta Persistence Api)*로 조회한 DB의 데이터를 매핑할 때 Entity(엔티티)나 DTO를 이용한다. 웹 어플리케이션을 만들 때 두 매핑방식에는 서로 다른 장단점이 존재하며 상황에 따라 적합한 방식을 사용한다. *2019년 이후로 JPA의 이름은 Java Persistence Api에서 Jakarta Persistence Api로 바뀌었다. https://en.wikipedia.org/wiki/Jakarta_Persistence Entity / DTO 매핑 방식의 차이점 큰 맥락에서 둘 사이의 가장 큰 차이점은 '코드의 가독성'과 '조회되는 데이터의 양'이다. - 엔티티 조회 방식 가독성이 좋고 유지보수를 하는데 편리하다. 하지만 엔티티에 매핑할 ..
스프링 - 마이바티스 설정 (MySQL) Update - 2022.04.09 : springboot / spring framework 설정방식 구분 MyBatis란? 마이바티스는 개발자가 작성한 SQL 구문을 손쉽게 실행하고 결과를 조회할 수 있도록 돕는 프레임워크입니다. 필수 인터페이스 스프링에서 MyBatis를 사용하기 위해서는 SqlSessionFactory와 1개 이상의 Mapper 인터페이스가 필요합니다. Intro SqlSessionFactory가 생성하는 SqlSession이란? > DataBase에 SQL을 실행하기 위해 필요한 객체입니다. MyBatis에서 SQL 구문은 SqlSession을 통해 실행되며 쓰레드마다 별도의 SqlSession 인스턴스를 가집니다. (SqlSession 인스턴스는 쓰레드간 공유되지 않습니다.) S..