이번 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 기술을 활용해봤다. 간단한 기능을 구현하..
2024년이 지났다.10월부터 호기롭게 프로젝트를 시작해 보겠다고 블로그 글을 올렸지만 그간 여러 일과 건강 문제로 인해서 진행할 수 없었다.그래도 다시 운동을 시작하며 건강도 챙기고 멘탈을 부여잡았고 12월부터 다시 프로젝트를 진행하였다.블로그에 글을 올리지 않았던 것은 글을 작성해야될 주제가 상당히 많아져서 일단 어느 정도 프로젝트를 마친 후 하나씩 정리해 보려고 쌓아두고 있는 상황이다.물론 내가 더 부지런하고 열심히했다면 블로그를 작성할 수 있었지만 천천히 프로젝트와 공부하는 시간을 늘려가는 중이라 일단 잠시 멈춘 상태이다.그나마 다행(?)인 점은 프로젝트를 진행하면서 부딪혔던 부분과 고민했던 부분들을 조사해서 정리는 해놓은 상태여서 참고자료도 찾아놨기 때문에 1월부터 빨리 작성할 수 있을 것 같다..
Set이번에 공부해 볼 자료구조는 Set이다. Set은 간단하게 설명하면 집합을 의미한다.그럼 집합에 대해서 조금 살펴보면 임의의 대상이 집합에 속하는지 여부를 명확히 하고 집합 위에는 순서나 연산 따위의 구조가 주어지지 않는다라고 설명한다.여기서 중요한 포인트는 집합에 속하는지 여부와 순서나 연산을 고려하지 않는다는 점이다.집합에 속하는지 여부를 판단하는 것은 하나의 집합 안에 중복된 요소를 허용하지 않는다로 이해할 수 있다.만약 위의 그림과 같이 A라는 집합이 있고 3이라는 숫자를 추가한다고 가정해보자.3이라는 새로운 숫자는 A 집합에 이미 존재하기 때문에 추가될 수 없게 된다.또 다른 부분을 살펴보면 현재 A 집합에 들어있는 숫자들은 어떤 순서를 가지지 않고 여기저기 흩어져 있는 상태로 보인다.이렇..
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를 그려봤으니 이제 테이블 형태로 살펴보자.테이블로 표현하면 위의 그림과 같이 만들 수 있다. 각 테이블과 연관관계를 아래와 같이 정리해 보았다.한 명의 회원은 여러 개의 게시글을 만들 수 있지만, 하나의 게시글은 오직 한 명에 의해서만 ..
함수 종속(Functional Dependency)정규화를 알아보기 전에 먼저 함수 종속을 알아야 한다. 함수 종속(FD)이란 한 테이블에 있는 두 개의 속성 집합 사이의 제약을 의미한다.만약 특정 X 값에 따라서 Y 값이 유일하게 결정될 때 X가 Y를 함수적으로 결정한다라고 하고, 반대로 Y가 X에 함수적으로 의존한다고 말한다. 이러한 제약 관계를 함수 종속(FD)라 하며 기호로는 X -> Y로 표현한다.함수 종속을 파악하기 위해서는 테이블의 스키마를 보고 의미적으로 파악해야 한다. 특정 상태에 따라서 파악하게 되면 중복되는 속성 값이 있을 수도 있기 때문에 상태가 아닌 스키마를 보고 함수 종속을 파악한다. 자명 함수 종속(Trivial Functional Dependency)X가 Y를 결정할 때 Y가..
프로젝트 구상이번에 진행할 프로젝트는 아파트 커뮤니티로 정했다.최근에 몸이 아파서 본가에서 일주일 정도 휴식을 취한 적이 있었다.집에 올라가려고 엘리베이터를 타니 게시판에 여러 가지 게시글과 광고가 종이 형태로 걸려있는 것을 보고 굳이 여기에 걸어놔야 되나? 생각이 들었다.엘리베이터에 게시글이 있으면 어떤 점이 불편할까 생각해봤을 때 3가지 정도로 추려볼 수 있었다.엘리베이터에 걸려 있어서 보려면 직접 엘리베이터까지 가야된다.게시글에 있는 정보가 너무 많아서 한눈에 들어오지 않는다.궁금한 사항들을 물어보기 위해서는 직접 전화하거나 관리실에 방문해서 물어볼 수밖에 없다.이러한 불편함들을 해결해 주는 웹 사이트를 만들어보려고 한다.또한 아파트 게시물을 볼 수 있는 것 외에도 같은 주민들과 소통할 수 있는 기..
서울에서 1년 간의 회고올해 4월에 부트캠프가 종료되고 나서 이번 10월까지 5 ~ 6개월 정도의 시간이 흘렀다. 부트캠프가 끝나고 나서 나름 열심히 하려고 최종 프로젝트를 수정해 보고 적용해보고 싶었던 기술들을 직접 학습해서 적용도 해봤다.중간에 같이 미니 프로젝트 했었던 팀원 중 한명이 MSA로 분리된 프로젝트를 다시 하나로 합쳐서 AWS EC2에 올리자고 했고, 같이 프로젝트를 수정하며 기능도 조금 추가해서 미니 프로젝트였던 공동구매 사이트를 EC2에 배포하였다.중간중간 CS도 공부하기 위해 부트캠프를 같이 들었던 사람들과 스터디를 만들어서 일주일에 한 번씩 만나 학습했던 내용을 발표하는 시간을 가졌고, 내가 몰랐던 지식들을 쌓는 것이 정말 재밌었다. 이러한 과정을 통해 정보처리기사 자격증도 취득할..
B-트리(B-Tree) B-트리는 이진 탐색 트리(BST)의 일반화한 트리 형태를 의미하며 다른 자가 균형(Self-Balancing) 이진 탐색 트리와 같이 스스로 균형을 유지하는 트리이다.이러한 Self-Balancing을 통해서 데이터를 조회하는데 더 좋은 성능을 가질 수 있게 된다.하지만 B-트리가 Self-Balancing을 한다고 다른 Self-Balancing BST와 같은 것은 아닌데 B-트리의 의미처럼 이진 탐색 트리를 일반화한 것이기 때문이다.이진 탐색 트리는 자식 노드를 최대 2개까지만 가질 수 있다는 특징이 있다. 하지만 그 보다 더 많은 자식 노드를 가지고 싶다면 어떻게 해야 될까?많은 자식 노드를 가지기 위해서는 자녀 노드가 가질 수 있는 값의 범위를 지정해줘야 한다.위의 그림과..
SQL InjectionSQL Injection 공격은 입력 값 검증의 취약점을 이용한 공격이다.흔히 웹 개발을 하게 되면 특정 입력 값에 대해서 SQL 문을 실행하게 되는데 이러한 점을 이용하여 입력 값으로 SQL 문을 삽입해 의도치 않게 SQL 문을 실행하게 된다.OWASP라는 웹 애플리케이션 보안을 담당하는 비영리 단체에서 4년마다 보안 취약점 TOP 10을 제공하고 있다. 위의 결과를 보면 2021년도에 SQL Injection 공격이 3위에 랭크되어 있다. OWASP Top Ten | OWASP FoundationThe OWASP Top 10 is the reference standard for the most critical web application security risks. Adopti..
프록시(Proxy)프록시는 클라이언트와 서버 사이에서 중개 역할을 하는 중개자로 이러한 프록시를 서버로 이용할 수 있다.프록시 서버는 클라이언트의 요청을 받아 웹 서버에 전달하고, 웹 서버의 응답을 프록시 서버가 클라이언트에 다시 반환한다.프록시 개념을 도입하게 되면 상당히 많은 역할을 부여할 수 있다. 웹 프로젝트를 진행할 때도 프록시 서버를 자주 다뤘는데 내가 가지고 있는 프록시 지식이 아주 적은 부분인 것 같아서 한 번 정리를 해보려고 한다.프록시 서버는 어디에 위치하는지에 따라서 Forward Proxy, Reverse Proxy로 구분된다. Forward ProxyForward Proxy 방식은 클라이언트 앞에 프록시 서버가 위치하는 형태로 클라이언트가 직접 웹 서버와 연결하는 대신, 프록시 서..