본문 바로가기

Total

(40)
[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)을 통해 관리할 수 있으며 스프링 시큐리티에서는 이와 관련한 여러 인터페이스를 지원한다. 개발중인 웹 어플리케이션에서 인증 / 인가 기능을 구현하기 위해 스프링 시큐리티를 사용하였는데 로그아웃 후 재 로그인을 하였을 때 로그인이 안되는 현상이 발생하여 스프링 시큐리티 설정하는 방법을..
Tomcat 환경설정 (server.xml) - 컨텍스트 경로 설정 톰캣이란? Tomcat은 많은 Java 개발자들이 사용하고 있는 웹 어플리케이션 서버입니다. Tomcat은 웹 어플리케이션이 동작하여 서버의 역할을 할 수 있도록 서블릿 컨테이너를 제공하며 서버 운영에 필요할 수 있는 여러 환경설정 기능을 지원합니다. 스프링 기반으로 생성한 어플리케이션은 기본적으로 별도의 톰캣 서버의 설치가 필요하며 서버의 실행을 위해서는 정해진 경로*에 운영할 웹 어플리케이션을 위치시킨 후 톰캣서버를 실행시켜야 합니다. 반면 스프링 부트는 기본적으로 톰캣서버를 내장하고 있으며 별다른 설정 없이 배포한 Jar 파일을 실행하여 웹서버를 구동할 수 있습니다. 스프링부트를 이용할 경우 내장톰켓을 통해 별다른 설정 없이 손쉽게 웹어플리케이션을 배포하고 서버를 운영할 수 있지만 아직 War 파일..
[환경 설정] 데이터 베이스 (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* - 개발의 편의성을 올려주는 라이브러리..
[Java api] Active Directory와 연결방법 (LDAP) Active Directory란? 사용자 정보를 저장하고 관리하는 데이터베이스의 한 유형으로 디렉토리 서비스의 한 유형이다. 친숙한 관계형 데이터베이스(MySQL, OracleDB 등)와 다르게 AD(Active Directory)는 도메인 네임 시스템(DNS)을 기반으로한 디렉토리 구조로 데이터를 저장/관리한다. * 이름을 기준으로 데이터에 손쉽게 접근할 수 있다. example) 저장되는 데이터의 name 예시 - 아래처럼 entry를 ,로 나열한 형태이다. CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=COM ('Fabrikam company 세일즈 팀 Jeff Smith'의 식별이름) 데이터 접근방식 - LDAP AD의 데이터에 접근하기 위해서는 LDAP 프로토콜을 사용한다...
[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 매핑 방식의 차이점 큰 맥락에서 둘 사이의 가장 큰 차이점은 '코드의 가독성'과 '조회되는 데이터의 양'이다. - 엔티티 조회 방식 가독성이 좋고 유지보수를 하는데 편리하다. 하지만 엔티티에 매핑할 ..
데이터베이스 트랜잭션 (Database Transaction) 데이터베이스 트랜잭션(Database Transaction)이란? 데이터베이스 관리 시스템(DBMS)에서 이루어지는 상호작용의 단위이다. 트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스(transactional database)라고 부르며, 현재 대부분의 관계형 데이터베이스 관리시스템은 트랜잭션 데이터베이스이다. (위키백과) 쉽게 말해 MySQL 등과 같은 DBMS을 통해 수행되는 데이터베이스 작업을 위한 '논리적 작업 단위'라고 말할 수 있다. 데이터베이스 트랜잭션의 특징 데이터베이스 시스템은 트랜잭션을 통해 데이터 무결성(Integrity*)을 보장하며 이를 위해 트랜잭션은 원자성, 일관성, 독립성, 영속성 이라는 특성을 갖는다. (ACID) * Data Integrity : 데이터 무결성,..