전체 글 200

[위대한 삽질] 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

[공부/자바] JVM과 작동원리

자바라는 프로그래밍 언어는 어떤 플랫폼에서든 소스코드 변경이 없어도 실행할 수 있습니다. 즉 어떤 CPU나 OS에서든 실행할 수 있단 뜻입니다. 그래서인지는 몰라도 웹 어플리케이션 개발에도 사용되고, 안드로이드에서도 코틀린을 밀어주기 이전엔 자바로 기능들을 구현했습니다. 이를 가능하도록 이번 주제인 JVM이 있었기 때문입니다. JVM이란? JVM은 원래 Java Virtual Machine의 약어로, "자바 가상 머신"이라고 번역할 수 있습니다. 가상 머신의 정의는 다음과 같습니다. 특정한 프로그램이 실행될 수 있도록 컴퓨터에 가상 실행 환경을 만들어 주는 소프트웨어가 설치된 컴퓨터 JVM 검색 결과의 문서를 찾아보면 JVM은 자바 바이트코드를 실행할 수 있는 주체다. 일반적으로 인터프리터나 JIT 컴파..

공부/Java 2022.02.27

[공부/자바] JCF (Java Collection Framework)란?

자바 컬랙션 프레임워크 (JCF) 란? Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 의미한다. 즉, 데이터를 담는 그릇들에 대한 정의를 모아놓은 프레임워크를 의미하며, 값의 성격이나 용도에 따라서 활용 방법에 따라 다양한 컨테이너를 제공한다. 다음은 JCF의 상속 구조이며 사용 용도에 따라 List, Set, Map 3가지로 요약할 수 있다. 각 인터페이스별 특징 List Interface (순서 O, 중복 O) LinkedList : 양방향 포인터 구조로, 데이터의 삽입/삭제가 빈번할 경우 유용하다(데이터의 위치 정보만 수정하면 되기 때문에). 스택/큐/양방향 큐 등을 만들기 위한 용도로 사용된다. 검색은 ArrayList에 비해 비효..

공부/Java 2022.02.26

[공부/서버] 프록시 서버란?

프록시 서버(Proxy Server)란? 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가르키는 말입니다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 프록시, 그 중계 기능을 하는 것을 프록시 서버라고 부릅니다. 프록시 서버 중 일부는 프록시 서버에 요청된 내용들을 캐시를 이용하여 저장해 둡니다. 이렇게 캐시를 해 두고 난 후에, 캐시 안에 있는 정보를 요구하는 요청에 대해서는 원격 서버에 접속하여 데이터를 가져올 필요가 없게 됨으로써 전송 시간을 절약할 수 있게 됨과 동시에 불필요하게 외부와의 연결을 하지 않아도 된다는 장점을 갖게 됩니다. 또한 외부와의 트래픽을 줄이게 됨으로써 네트워크 병목 현상을 방지..

공부/서버 2022.02.25

[공부/서버] CORS란?

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

공부/서버 2022.02.24