이번 RC 프로젝트를 진행하며 보안을 구성하기 위해 Spring Security를 적용하였다.이전에 프로젝트때 사용했던 것처럼 사용하려고 했지만 버전이 올라가면서 내가 사용하던 방식이 deprecated 되었다는 것을 알았다.찾아보니 버전이 올라가면서 다른 표현 방식을 사용한다는 것을 알게 되었다.어떤건지 한 번 알아보자.
프로젝트를 진행하며 ORM 기술로 Spring Data JPA를 활용할 때 text 타입을 어떻게 설정해야 하는지 몰랐다.이때까지 프로젝트를 진행하며 text 타입을 다룰 일이 없어 엔티티의 필드에 text 타입을 적용해 본 적이 없었다.이 참에 경험을 늘린다 생각하고 어떻게 적용하는지 찾아보았다.@Lob 애노테이션을 사용하는 곳도 있었고, @Column 애노테이션의 length 속성을 의도적으로 256을 지정해 주는 방법도 있었다.어떤 방법들이 있는지 알아보자.
RC 프로젝트에서 테이블을 설계하며 속성들의 타입을 지정해줄때 긴 문자열은 text 타입, 짧은 문자열은 varchar 타입으로 지정해주었다.여기서 궁금했던 부분은 같은 문자열을 다루는 타입인데 어떤 차이가 있어서 이렇게 구분되는 것일까?그리고 언제 사용되는지도 궁금했었다. 간단하게 정리하면 varchar 타입의 컬럼이 너무 큰 길이를 사용하면 다른 컬럼들이 사용할 수 있는 최대 크기의 공간에 영향을 받게 된다고 한다.따라서 내가 사용하는 MySQL 서버에서는 레코드 사이즈 한계로 인해 varchar 타입의 최대 저장 길이를 설정할 시 공간을 아껴서 설정해야 된다.메모리와도 관련이 있는데 varchar 타입은 최대 크기 만큼 메모리에 올라가기 때문에 재사용할 수 있지만 text 타입은 메모리에 미리 할당..
RC 프로젝트를 시작한 지 이제 한 달 반에서 두 달 정도 되는 것 같다.이번에 1.0 버전을 개발을 완료했는데 간단한 소감(?)을 말해보려고 한다. RC 프로젝트는 처음 설계할 때 언급했었지만 아파트 커뮤니티 서비스로 시작했다.그냥 간단한 게시판 서비스라고 생각하면 쉬울 것 같다. 어차피 큰 틀에서는 게시판이고 여기서 부가적인 기능이 추가되면 아파트 커뮤니티로 확장할 수 있다. RC 1.0 버전은 간단한 기능을 구현하는데 중점을 두었다.회원 기능, 게시판 기능, 댓글 기능 이렇게 총 3가지 기능으로 이루어져 있고, 추가적으로 Spring Security와 JWT를 활용하여 보안적인 부분을 챙겼다.데이터 접근 기술로는 Spring Data JPA를 사용하여 ORM 기술을 활용해봤다. 간단한 기능을 구현하..
DOM을 잘 몰라서 발생한 에러프로젝트를 진행하면서 자바스크립트 파일을 작성했었다.자바스크립트를 작성한 뒤 index.html에 script 태그로 해당 JS 파일을 링크로 걸어줬는데 여기서 문제가 발생했었다.문제는 바로 JS 파일이 동작하지 않는 문제였다.실제로 오류가 발생하는 부분은 콘솔로 찍어보니 undefined가 출력되었다.왜 동작하지 않는지 원인을 파악해 보니 DOM이 생성되기 전에 스크립트 파일을 먼저 불러와서 발생한 오류인 것을 알게 되었다.HTML 파일은 HTML 파서에 의해 DOM으로 변환된다. 하지만 여기서 파서가 script 태그를 만나게 되면 DOM 생성을 중지하고 자바스크립트 엔진이 script에 정의된 파일 및 코드를 실행하게 된다.문제가 되었던 코드가 위의 사진 부분이었다. ..
NEST-Architects 프로젝트이전에 부트캠프를 진행하며 프론트 쪽도 개발을 진행했었는데 아무래도 백엔드에 관심이 많았기 때문에 프론트 쪽 기술들을 잘 활용하지 못했었다.특히나 프론트엔드 프레임워크로 Vue3를 사용했는데 자바스크립트도 완벽히 모르는 상태에서 Vue를 사용하니깐 제대로 활용하지 못했고, 마음에 드는 결과물을 만들 수 없었다.Vue 외에도 React나 Angular와 같은 프레임워크들은 자바스크립트를 보다 편리하게 사용할 수 있도록 만든 도구인데 정작 어떤 부분이 편리한지 잘 모르는 상태였다.따라서 자바스크립트 공부가 필요하다고 생각이 들어서 어떻게 공부해 볼까 고민하다가 그냥 강의만 듣는 것보다는 무언가를 만들어보면서 학습하는 것이 더 좋을 것 같다고 판단하였다.어떤 것을 만들어볼까..
DB 설계하기본격적인 개발을 시작하기에 앞서 DB를 먼저 설계해보려고 한다. DB는 RDBMS 계열의 MySQL을 선택했다. ERD 그리기이전 포스팅에서 언급했던 것처럼 회원, 게시판, 댓글 기능에 대해서 테이블을 생성하려고 한다.먼저 ERD를 그려보면 위의 그림과 같이 표현할 수 있다.회원은 여러 게시판에 댓글을 작성할 수 있고, 게시판도 여러 회원을 통해서 댓글이 달릴 수 있다. 따라서 다 대 다 관계가 형성되면서 comment(댓글) 테이블로 분리하게 되었다.ERD를 그려봤으니 이제 테이블 형태로 살펴보자.테이블로 표현하면 위의 그림과 같이 만들 수 있다. 각 테이블과 연관관계를 아래와 같이 정리해 보았다.한 명의 회원은 여러 개의 게시글을 만들 수 있지만, 하나의 게시글은 오직 한 명에 의해서만 ..
프로젝트 구상이번에 진행할 프로젝트는 아파트 커뮤니티로 정했다.최근에 몸이 아파서 본가에서 일주일 정도 휴식을 취한 적이 있었다.집에 올라가려고 엘리베이터를 타니 게시판에 여러 가지 게시글과 광고가 종이 형태로 걸려있는 것을 보고 굳이 여기에 걸어놔야 되나? 생각이 들었다.엘리베이터에 게시글이 있으면 어떤 점이 불편할까 생각해봤을 때 3가지 정도로 추려볼 수 있었다.엘리베이터에 걸려 있어서 보려면 직접 엘리베이터까지 가야된다.게시글에 있는 정보가 너무 많아서 한눈에 들어오지 않는다.궁금한 사항들을 물어보기 위해서는 직접 전화하거나 관리실에 방문해서 물어볼 수밖에 없다.이러한 불편함들을 해결해 주는 웹 사이트를 만들어보려고 한다.또한 아파트 게시물을 볼 수 있는 것 외에도 같은 주민들과 소통할 수 있는 기..
서울에서 1년 간의 회고올해 4월에 부트캠프가 종료되고 나서 이번 10월까지 5 ~ 6개월 정도의 시간이 흘렀다. 부트캠프가 끝나고 나서 나름 열심히 하려고 최종 프로젝트를 수정해 보고 적용해보고 싶었던 기술들을 직접 학습해서 적용도 해봤다.중간에 같이 미니 프로젝트 했었던 팀원 중 한명이 MSA로 분리된 프로젝트를 다시 하나로 합쳐서 AWS EC2에 올리자고 했고, 같이 프로젝트를 수정하며 기능도 조금 추가해서 미니 프로젝트였던 공동구매 사이트를 EC2에 배포하였다.중간중간 CS도 공부하기 위해 부트캠프를 같이 들었던 사람들과 스터디를 만들어서 일주일에 한 번씩 만나 학습했던 내용을 발표하는 시간을 가졌고, 내가 몰랐던 지식들을 쌓는 것이 정말 재밌었다. 이러한 과정을 통해 정보처리기사 자격증도 취득할..
Spring Netflix Eureka 적용 이전 포스팅에서 Spring Cloud Gateway를 적용시켜 보았다. 이번에는 Service Discovery 서버인 Spring Netflix Eureka가 뭔지 살펴보고 현재 SSM 프로젝트에 적용시켜 보자. Spring Netflix EurekaEureka를 프로젝트에 적용시키기 전에 먼저 Eureka가 뭔지를 살펴보고 Eureka가 하는 역할인 Service Discovery가 어떤 것인지도 같이 알아보자. Service Discovery다른 서비스를 호출할 때는 다른 서비스 인스턴스가 있는 곳의 네트워크 정보를 알아야 한다. 그 정보는 아이피 주소와 포트 번호.하지만 클라우드의 경우에 인스턴스는 동적으로 할당되기 때문에 아이피 주소와 포트번호가 바..
Spring Cloud Gateway 적용기존의 프로젝트에 MSA를 적용함에 따라서 여러 서비스로 분리가 되면 해당 서비스만의 IP 주소와 포트번호가 지정되게 되는데 각 서비스마다 호출하는 것이 아닌 한 곳에서 요청을 관리하고 처리하는 것이 시스템을 관리하는 측면에서 더 유리하다.SSM 프로젝트를 진행할 당시 웹 서버로 Nginx를 구성하였는데 해당 서버가 프록시 역할을 하여 클라이언트로 받은 요청을 적절하기 백엔드로 넘겨주게 된다.이러한 프록시 역할을 똑같이 해주는 것이 Spring Cloud Gateway이다. Spring Cloud GatewaySpring Cloud Gateway는 앞서 언급했던 대로 API 게이트웨이 서버이다. 클라이언트에서 받은 요청을 다른 API로 라우팅 하고, 보안이나 모니..
기존의 프로필 이미지 기능이번 포스팅은 MSA 작업을 위한 기능 분리를 시작해볼까 한다.기능을 분리하기에 앞서 어떤 기능을 분리할지 선택해야 되는데 SSM 프로젝트에 있는 여러 기능 중에서 프로필 이미지 기능을 분리하기로 정했다.프로필 이미지 기능을 분리하는 이유는 3 가지가 있다. 1. 채팅 기능과 관련된 프로필 이미지나는 SSM 프로젝트를 진행했을 당시 채팅 기능을 주로 개발하였다. 해당 기능을 개발할 때 사용자가 등록한 프로필 이미지가 보여야 하는데 그러지 못하고 기본 프로필 이미지로 등록되는 순간이 종종 있었다. 2. 조금 더 효율적인 코드를 작성해 보자기존의 프로필 이미지 기능은 일 대 다 관계로 형성되어 진행했었다. 하지만 자세히 살펴보니 프로필 이미지를 추가하는 기능은 따로 없었고 이를 통해..
프로젝트 다시 시작하기.......이번 주말에 유튜브를 보면서 갑자기 고민에 빠졌었다.영상에서 최근에 자바 백엔드로 서비스 기업에 취업하신 분들의 기술 스택을 볼 수 있었는데 생각 보다 내가 사용해 봤던 기술들이 많이 있었다.그중에서 MSA와 kafka가 메인이라고 나왔는데 실제로 대부분의 서비스 기업들 채용 공고를 살펴보면 해당 기술들에 관한 지식을 요구한다.나도 취업하고 싶은 곳이 주로 서비스 기업이고, 미니 프로젝트와 최종 프로젝트를 진행하며 MSA와 kafka를 사용했었다.프로필 이미지 기능을 분리하면서 네트워크 통신에 대한 고민이 있었다. 그래서 비동기 통신 방식으로 AWS SNS와 SQS를 사용할 예정이었다.하지만 잘 생각해 보니 최종 프로젝트 때 채팅 기능을 맡으면서 kafka를 사용했었는데..
AWS CodeDeploy이전 글을 통해서 GitHub Actions를 하는 방법과 현재 프로젝트에 어떻게 적용했는지 알아보았다. [SSM_프로젝트] - GitHub Actions와 AWS Code Deploy를 활용한 CI/CD 적용 - (1)기존의 젠킨스 구성최종 프로젝트를 진행하면서 CI/CD 도구로 Jenkins를 사용하였다. 위의 사진과 같이 깃허브 특정 브랜치에 push 이벤트가 발생하면 webhook이 전달되어 젠킨스에서 파이프라인이 돌hotechstory.tistory.com지금부터는 AWS CodeDeploy를 통해서 어떻게 EC2로 프로젝트를 배포할 것인지 살펴보자. AWS CodeDeployAWS CodeDeploy는 EC2, 온프레미스 인스턴스, Lambda 함수, ECS 등 여러 ..
기존의 젠킨스 구성최종 프로젝트를 진행하면서 CI/CD 도구로 Jenkins를 사용하였다. 위의 사진과 같이 깃허브 특정 브랜치에 push 이벤트가 발생하면 webhook이 전달되어 젠킨스에서 파이프라인이 돌아가는 구성이었다.CI 과정이 끝나면 도커 이미지를 만들어서 도커 허브로 푸시하고 k8s 마스터 노드에 새로운 deployment.yml 파일 배포하였다. GitHub Actions와 AWS CodeDeploy로 CI/CD를 구성한 이유젠킨스를 계속 사용해도 좋지만 이번 최종 프로젝트가 끝난 뒤 나 혼자서 서비스를 배포할 때는 GitHub Actions와 AWS CodeDeploy를 사용하기로 했다.깃허브 액션을 선택한 이유로는 CI/CD 구성이 젠킨스 보다 편리하고, 내가 사용할 수 있는 자원을 고..