본문 바로가기

분류 전체보기

(92)
이메일로 인증 과정(SMTP,Redis) 지난 프로젝트를 진행하면서 Redis를 처음 써봤다. 실시간 채팅을 구현하여 채팅 내역을 저장하려고 했지만 서비스 특성상 채팅 내역은 DB에 저장하고 실시간 채팅 인원수 카운팅 하는데 사용했다. 회원가입 시 이메일을 통해 인증번호를 발송하고 해당 인증 번호를 Redis에 저장하여 인증 과정을 구현했다. Redis를 이전에 정리했었기에 간단하게 설명하자면 인메모리 데이터 구조로 컴퓨터의 메인 메모리 RAM에 데이터를 올려 사용하는 방법이다. 메모리에 데이터를 올리는 이유는 속도 때문이다. 저장공간에서 데이터를 가져오는 속도와 RAM에 올려진 데이터를 가져오는 속도가 수백배 이상 빠르다. 그러하기에 Redis는 빠른 속도가 장점이다. 1. Redis설치 이번에는 배포 서버에 설치하지 않고 간단하게 로컬에 설..
이메일로 인증 코드 발송(SpringBoot, SMTP) 전에 프로젝트를 진행하면서 구현해보고 싶었던 회원가입 시 인증 과정을 구현해봤다. 휴대폰 인증을 해보고 싶었고 휴대폰 인증 전 이메일 인증을 먼저 구현해봤다. 추후 휴대폰 인증도 구현 예정이고 인증번호를 Redis에 저장하는 방법도 구현해 볼 예정이다. 1. 의존성 추가 buid.gradle https://mvnrepository.com/ 에서 Spring Boot Starter Mail 검색 후 가장 많이 사용했던 버전으로 추가했다. implementation 'org.springframework.boot:spring-boot-starter-mail:2.7.0' 2. MailConfig Spirng에서 메일 서버를 사용하기 위해서는 메일 서버와 연결해야 한다. 보통 gmail을 많이들 사용했는데 언제부..
Swagger UI로 API 문서 통합 관리하기 Overview 프로젝트를 진행하면서 API명세서는 Notion에서 관리했다. 그 과정에서 팀원중에 실수로 수정하거나 삭제하는 경우가 발생해서 난감했던 상황도 있었다. 우리는 프로젝트 막바지에 Swagger를 알게되었고 배포가 끝난 상황에서 적용해봤다. 처음엔 UI가 보기 좋다, 갈끔하게 정리되는구나? 정도만 보고 넘어갔다. 개인적으로 연습겸 프로젝트를 하나 하고있는데, Swagger를 적용해서 진행 해보라는 동료의 조언에 전에 진행했던 프로젝트에서는 크게 느낌이 없었는데..? 라고 생각했다. Swagger관련하여 이것저것 찾아봤고 적용해봤다. 내가 아직 Swagger를 완벽히 활용하고 있지 않지만 놀라웠다... 단순 문서화 하는게 아닌 API를 문서내에서 Parameter를 넣어가며 바로바로 실행이 가..
Web Server? WAS? Spring을 처음 공부하면서, 프로젝트를 진행하면서 자연스럽게 Tomcat을 사용하게 되었다. 처음 Tomcat을 사용하면서 WAS(Web Application Server) 라는 것은 알고 있었고 프로젝트를 진행하면서 HTTPS와 무중단 배포를 구현하면서 NginX를 사용했는데 NginX는 웹 서버라고 알게되었다. 처음에 서버면 같은 서버지 왜 WAS와 Web Server로 나뉠까? 라는 궁금증이 생겼고 미루었던 내용을 정리해보려고 한다. 1. web Server 정적인 페이지를 표현하기 위한 서버로 클라이언트로 부터 HTML, JPG, GIF 등 과 같은 문서,이미지를 HTTP프로토콜을 통해 웹 브라우저로 제공하는 서버 정적 데이터를 처리하며 다양한 동적 데이터를 요청하게 되면 WAS서버로 데이터를..
JPA_영속성 컨텍스트란? 스프링으로 프로젝트를 진행하면서 JPA의 영속성 컨텍스트를 개념만 알고 별도로 정리하지 않고 넘어갔다. 지금 이렇게 하나하나 개념을 정리하고 있으니 JPA 영속성 컨텍스트도 다시 한번 익히고 정리해보려고 한다. JPA를 공부하며 가장 중요하다고 생각하는 부분은 설계와 관련된 객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping)과 지금 정리해보려고 하는 JPA 내부 동작인 영속성 컨텍스트 이다. 1. 영속성 컨텍스트(Persistence Context)란? 엔티티를 영구 저장하는 환경 이라는 의미 EntityManager.persist(entity); 동작 실제 DB에 저장하는 것이 아니라 영속성 컨텍스트를 통해 Entity를 영속화 한다는 의미다. 조금 더 구체적으로 ..
접근제어자의 종류 / 왜 사용할까? 프로젝트를 진행하면서 사용했던 접근제어자는 public 과 private만 사용해봤었다. 이외에 2가지의 접근제어자가 있다고는 알고 있었지만 사용해보진 못했다. 이번 기회에 접근제어자에 대해 정확히 이해하고 넘어가야겠다. 1. 접근제어자(Access Modifier)란? 접근제어자는 클래스나 변수, 메서드의 접근을 제어하기 위해 적어주는 예약어를 말한다. 접근제어자는 생략이 가능하며 생략했을 경우 자동으로 default 임을 뜻한다. 접근제어자를 사용하는 이유? 은행에 비유해보자면 은행에 있는 창구에는 누구나 접근하여 일처리를 할 수 있다. 하지만 은행내에 있는 금고에는 관계자외에는 출입이 엄격하게 통제되고 있다. 만약 금고에도 누구나 접근할 수 있고 사용할 수 있다면 큰 문제가 발생하지 않을까? 이처럼..
JVM 메모리 구조? JVM이란? JVM 메모리 구조를 보기전에 JVM이 무엇인지 알아야 한다. JVM은 Java Virtual Machine의 약자로 자바 가상 머신이라고 한다. 자바와 OS(운영체제) 사이에서 중개자 역할을 수행하며 자바가 OS(운영체제)에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다. 위의 이미지는 자바 프로그램의 실행 단계이다. 먼저 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환된다. 이러한 바이트 코드를 JVM에서 읽어 들인 후 복잡한 과정을 거쳐 어떤 운영체제에서든 프로그램을 실행할 수 있도록 만든다. 만약, 자바 소스 파일은 리눅스에서 만들고 윈도..
가비지 컬렉션, 컬렉터(Garbage Collection) 1. 가비지 컬렉션 Garbage Collection 약어로 GC라고 부른다. 메모리 관리 방법중 하나로 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다. 가비지 컬렉션이 없다면 프로그래머가 메모리를 할당한 뒤 수동으로 해제까지 직접 해야 한다. 메모리를 할당해놓고 필요 없어진 뒤에도 해제를 안하여 메모리 누수가 생기거나 해제했던 메모리를 다시 사용하는 실수 등에서 버그가 양산된다. 이러한 문제들을 해결하기 위해서 제시된게 가비지 컬렉션이다. 가비지 컬렉션에서 제공하는 할당과 해제를 이용하여 자동으로 프로그램이 실행되며 생기는 쓸모없어지는 메모리들을 알아서 수집하고 관리해준..
메이븐(Maven)과 그래들(Gradle) 스프링을 사용하면서 빌드 관리 도구인 그래들만 사용하였다. 처음 스프링을 학습하면서 자연스럽게 그래들을 사용했고 프로젝트를 생성할때 메이븐 이라는 것도 있구나 정도 봤었고 프로젝트를 진행하면서 열심히 삽질? 구글링을 통해서 많은 사람들이 그래들 뿐만 아니라 메이븐을 사용했다는걸 알았다. 당시 메이븐과 그래들의 차이점이 뭘까? 하고 구글링을 통해 '아 메이븐은 pom.xml파일에 필요한 각종 의존성과 라이브러리 추가,버전 등의 프로젝트 설정 정보를 xml형식으로 나열해서 하나하나 직접 작성하고 설정하는구나' 정도만 알고 별도로 정리하지 않았기에 주말에 일찍 일어나기도 했고 정리를 해보려고한다! 1. 빌드 관리 도구란? 빌드? 빌드란 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 ..
[자료구조] 스택 (Stack), 큐(Queue) 프로젝트 기간이 짧다보니 시간적 여유가 없다는 핑계로 자료구조에 대해 깊게 공부하지 못했다. 이번 프로젝트를 끝으로 개발자에 대한 꿈을 접을 생각이 없고 나는 앞으로 계속 나아가야 하기에 조금씩, 하나하나 공부해 나가려고 한다. 1. 스택 (Stack) 1-1. 스택(Stack)이란? 쉽게 얘기하자면 쌓아 올린다는 것을 의미한다. 따라서 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다. 1-2. 스택(Stack)의 특징 LIFO (Last In First Out) 즉 후입선출 방식으로 동작하며 가장 최근 스택에 삽입(push)된 자료의 위치를 top이라 한다. 스택의 push는 top에 새로운 데이터를 추가하고 pop은 가장 최근에 삽입된 데이터가 스택에서 삭제된다...