워크샵6349 141

[위대한 삽질] H2 database file is locked

Spring 프로젝트를 진행하던 도중, 제목과 같은 문제가 발생하여, 포스팅하게 되었습니다. 이전에도 자주 보았던 문제이지만, 해결 방법을 자주 까먹는 바람에 기록하고자 합니다. 먼저, 대부분의 원인은 jdbc URL에 TCP 설정을 하지 않았기에 발생합니다. TCP를 설정하지않으면, 다중 접속이 불가능해집니다. jdbc:/h2:tcp:~/{db명} 혹은 jdbc:/h2:tcp:./{db명} 을 하면 됩니다. 전자 방식을 사용시, C:\Users\{이름}\{db명}.mv.db 파일이 생성됩니다. 후자 방식을 사용시, h2\bin\{db명}.mv.db 파일이 생성됩니다. (가능한 전자 방식을 사용해주세요. 후자 방식같은 경우에는 프로젝트 진행 시, 해당 프로젝트 디렉토리에 생기는 경우가 있습니다.) 그리고..

위대한 삽질 2022.03.04

[괴발개발] REST API - 이메일 인증

※본 포스트는 이전 포스트와 이어집니다.※ 지난 번에... 가상의 시나리오들 중 3번을 제외한 나머지들은 개발하였습니다. 비밀번호 변경을 위한 메일 발송을 하기 위해 몇 가지 세팅을 해야합니다. 준비 과정 먼저 지메일(gmail)를 사용하여 이메일을 발송할 것이기에 앱 비밀번호를 추가해줘야합니다. 앱 비밀번호는 2단계 인증을 사용해야하지만 가능한 기능입니다. (보안 탭에서 찾을 수 있습니다.) 기기 선택을 메일을 보낼 기기로 선택하고 생성한 후, 도움말에서 나온 대로 설정해주면 사용 가능합니다. 그후, dependency를 추가합니다. implementation 'org.springframework.boot:spring-boot-starter-mail' dependency를 추가하고 난 후에는 appli..

Spring/괴발개발 2022.03.03

[괴발개발] REST API - 인증

저는 Spring로 인증을 할 때, 늘 WebSecurityConfigurerAdapter를 상속해서 개발했었습니다. 하지만, 이 방법을 하면, SpringSecurity가 필요하였고, SpringSecurity에 아무런 설정이 없다면, 기본 로그인을 해야 하고, 그렇지 않으려면, WebSecurityConfigurerAdapter로 설정을 해주어야 했습니다. 그리고 그 외에도 설정을 해주어야 하는 부분들이 많아 프로젝트의 규모가 크면 클수록 귀찮아지고 하나하나 하기 힘들었습니다. (물론 보안에 있어 많은 모듈들을 지원해주는 것에 있어서는 고마움을 느낍니다.) 그래서 이번 포스팅에서는 SpringSecurity 없이 다음 3가지 인증, 인가 기능을 구현해보는 것을 목표로 세웠습니다. 비밀번호 암호화 이메..

Spring/괴발개발 2022.03.02

[공부/자바] JVM 메모리 관리

Java 메모리 영역 중 Stack, Heap, 그리고 static 이렇게 3가지 영역에 대해 공부하고 기억, 그리고 기록을 남기고자 포스팅하고 있습니다. Static Area 자바 코드 내에 있는 3가지 영역(필드, 생성자, 메소드) 중 필드 부분에서 선언된 변수(전역변수)와 정적변수(static변수)를 static 영역에 데이터를 저장합니다. static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남게 됩니다. 따라서 전역변수를 무분별하게 많이 사용할 경우, 메모리가 부족할 우려가 존재합니다. Stack Area 메소드 내에서 정의하는 기본 자료형(이하 타입) [int, double, boolean, byte 등)에 해당되는 지역변수의 데이터 값이 저장되는 영역으로, 해당 메소드가..

공부/Java 2022.03.01

[Spring] DTO vs VO

※본 글은 제 주관적인 생각을 나타낸 글입니다. 주의해주세요.※ 먼저 이 글에서 DTO에 대해 설명하고 있지만, 다시 한 번 더 자세히 설명하겠습니다. DTO(Data Transfer Object) DB에서 검색하기 위해 DAO와 함께 사용되는 경우가 종종 있다. 저장 및 검색 외에 로직을 가지지 않는다. (비지니스 로직 가지지 않음) 가변 레이어와 레이어 사이에서 사용 가능 VO (Value Object) 값이 동일하다면 동일한 객체로 봄 불변 비지니스 로직을 가질 수 있다. DTO를 대신하여 표현하기도 한다. equals와 hashcode를 재정의를 해야한다. 모든 레이어에서 사용 가능 위 내용들은 이 글을 참고하였습니다. 사실 제목처럼 뭐를 사용하는 것이 맞다는 정답도 없고, 논쟁이 많기 때문에 사..

Spring 2022.02.28

일상이에요

곧 개학을 하여 다시 학교로 복귀해야하는 데 오잎 클로버입니다. 현재 SpringBoot에 대해서 다시 처음부터 차근차근 공부하고 있습니다. 강의를 구매해서 들어볼려고 했지만, 가격이 문제라기보다는 제가 강의를 듣는 동안 계속 딴짓을 할 것 같아 Youtube에 있는 강의, 그리고 고수 분들께서 올려놓은 블로그 글들을 참고해서 공부를 하고 있습니다. (대부분의 강의 길이는 길기에 비교적 짧은 Youtube 강의를 되도록 봅니다.) 공부를 하고 나면 코드를 수정해서 고쳐보거나 아니면 기능을 추가하며 일종의 복습도 하고 있습니다. (문제는 자꾸 까먹어서;; 계속 보게된다는 점입니다.) 그리고 진짜 일상 이야기를 하자면, 현재 저는 머리를 기르고 있는 데 좀 안 어울리는 것 같기도 하고 머리가 상한 것 같기도..

일상 2022.02.27

[공부/서버] CORS란?

웹 개발을 하다 보면 최소한 한 번 이상은 CORS 정책 위반으로 인해 에러가 발생해본 경험쯤은 있을 것입니다. 저 역시 저 혼자서 Spring & React를 공부해보고자 토이 프로젝트를 제작하는 도중 이 이슈를 처음 겪게 되었습니다. 당시, React, Spring 환경 둘 다 로컬 환경에서 진행하였고, Spring으로는 REST API를 먼저 완성시킨 후, React로 API 서버와 통신을 시도했었습니다. API 서버와 통신을 진행하여 데이터를 받아오면 되는 단순한 작업이었기에 아무 생각 없이 통신을 진행했는 데, 콘솔에서 에러를 뱉어내어 꽤 당황하였던 경험이 있습니다. (경험...) 지금 보면 나름 친절하게 해결방법을 알려주는 에러 메시지라고 생각이 들지만, 웹 어플리케이션 개발 경험이 전무하던 ..

공부/서버 2022.02.24

[공부/자바] 프로세스와 쓰레드의 차이

프로세스, 쓰레드, 그리고 JVM 쓰레드, 멀티 프로세스, 멀티 쓰레드. 이렇게 5가지를 설명하고자 합니다. 프로그램(Program)이란? 사전적 의미: 어떤 작업을 위해 실행할 수 있는 파일 프로세스(Process)란? 사전적 의미: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 운영체제로부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미합니다. 할당받는 시스템 자원의 예시) CPU 시간, 운영되기 위해 필요한 주소 공간, Code Data, Stack, Heap의 구조로 있는 독립적인 메모리 영역 특징) 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음..

공부/Java 2022.02.23

[공부/자바] SOLID에 대해서

SOLID란? 객체지향 설계 5원칙인 SOLID, 각 원칙들의 영어 앞글자를 따서 SOLID라고 합니다. SPR (Single Responsiblity Principle): 단일 책임 원칙 OCP (Open Closed Principle): 개방 폐쇄 원칙 LSP (Liskov Subsitution Principle): 리스코프 치환 원칙 ISP (Interface Segregation Principle): 인터페이스 분리 원칙 DIP (Dependency Inversion Principle): 의존 역전 원칙 위 원칙들은 응집도를 높이고, 결함도는 낮추자는 고전 원칙을 객체 지향의 관점에서 재정립한 것으로 볼 수 있습니다. SRP (Single Responsiblity Principle)이란? SRP ..

공부/Java 2022.02.22

[Spring] Spring Transaction 세부 설정 설명

※ 이 글은 이 글과 연결되어 있습니다! 참고해주세요. ※ Spring 트랜잭션에는 4가지의 세부 설정이 가능합니다. 트랜잭션 전파 격리 수준 제한 시간 읽기 전용 트랜잭션 전파 트랜잭션의 경계에서 이미 진행 중인 트랜잭션이 있거나 없을 때 어떻게 작동할 것인가를 결정하는 방식을 의미합니다. Spring이 지원하는 전파 속성은 다음의 7가지가 있습니다. REQUIRED SUPPORTS MANDATORY REQUIRES_NEW NOT_SUPPORTED NEVER NESTED 저도 자세히는 모르기때문에 간략하게만 설명하도록 하겠습니다;; 자세히 아시는 분들은 댓글 달아주시면 감사하겠습니다.. 1. REQUIRED default 속성으로 모든 트랜잭션 매니저가 지원하며, 대개 이 속성을 사용합니다. 미리 시작..

Spring 2022.02.21