문제 상황 및 원인스프링 애플리케이션을 백엔드로 하고, React 애플리케이션을 프론트엔드로 하는 개발하던 중, 다음과 같은 오류를 발견했다. Access to XMLHttpRequest at 'http://localhost:8080/hello?name=world' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 확인해보니, 브라우저는 기본적으로 동일 출처 정책(Same Origin Policy, SOP)을 지키기 때문에 다른 출처의 리소스 접근을 금지해 생기는 문제로 확인됐다. 이를 해결하기..
Kotlin
@Entity와 @Id 어노테이션 사용해 테이블 정의하기특정 클래스에 @Entity 어노테이션을 사용하면 테이블을 정의할 수 있다. 예를 들어 단어 정보를 저장하기 위한 Vocabulary 테이블을 정의한다고 해보자. 이런 테이블은 다음과 같이 정의될 수 있다. @Entitydata class Vocabulary( @Id val id: String = UUID.randomUUID().toString(), val word: String, val meaning: String) 이 테이블의 이름은 클래스의 이름과 같은 Vocabulary가 되며, 내부에는 아이디 id, 단어 word, 뜻 meaning 세가지 필드를 가진다. 테이블에는 꼭 Primary Key가 필요하기 때문에 id 변..
H2 Database란?H2 Database는 가볍고 편리한 인 메모리 데이터 베이스로 프로그램 구동 시 메모리에 데이터를 저장하고, 애플리케이션이 종료되면 메모리가 삭제되는 데이터베이스이다. 이는 일반적으로 테스트 환경 혹은 Dev 환경 등 데이터에 대한 영속성이 요구되지 않는 환경에서 데이터를 저장하는데 사용한다. 브라우저 기반의 콘솔 프로그램 또한 제공해, 어떤 데이터가 저장되었고 삭제되었는지를 편하게 확인할 수 있다. 📌 영속성이란 프로그램이 종료돼도 데이터가 사라지지 않는 특성을 뜻한다. 이번 시간에는 Spring Data JPA를 사용해 H2 Database를 사용 설정하는 방법을 알아볼 것이다. 코틀린 스프링 프로젝트에 Spring Data JPA, H2 Database 사용 설정하기pl..
@ConfigurationProperties 가 필요한 경우application.properties 파일에는 애플리케이션을 위한 여러 설정이 들어간다. 이때 여러 설정 값들을 application.properties에 정의해 놓는데, 이 값들을 앱으로 가져와야 하는 경우가 생긴다. 예를 들어 서버의 이름, 서버에서 허용하는 클라이언트의 유형 등을 개발 환경 별로 다르게 설정해놓고 이 값을 통해 애플리케이션을 설정하는 경우 등이 있을 수 있다. 예를 들어 다음과 같은 application.properties 파일이 있다고 해보자.spring.application.name=setting-configurationpropertiesserver.server-name=releaseserver.allowed-clie..
로그 레벨이란?로그 레벨은 애플리케이션에서 발생하는 로그의 중요도를 나타내는 지표이다. 개발 환경 별로 로그 레벨을 관리하는 것은 매우 중요하다. 개발 시에만 필요한 로그를 넣어뒀는데, 이것이 프로덕션에서도 보여진다면 불필요한 로그가 보여지는 것이기 때문에 불필요한 데이터가 디스크를 차지하거나 할 수 있다. 따라서 개발 환경 별로 서로 다른 로그 레벨의 설정이 필요하다. 이것을 어떻게 설정하는지 알기 위해 먼저 Spring 에는 어떤 로그 레벨이 있는지 알아보자. Spring의 로그 레벨Spring 에서는 다음과 같은 6단계의 로그 레벨을 사용한다. TRACE: 가장 상세한 정보를 제공하는 레벨DEBUG: 개발 시 디버깅 목적으로 사용되는 레벨INFO: 일반적인 정보를 나타내는 레벨WARN: 잠재적인 문..