전체 글

하고 싶은 것들을 하며 성공하기
개요 프로젝트를 진행하며 User에 대해 ERD를 설계했다. 이때 왜 이렇게 설계했는지 판단의 기준 등을 기록해보려 한다. 본문 User(회원) id는 Primary key이며 정수이고, NULL이 아닌 항상 값을 할당 받아야 한다. 속성은 1부터 Auto increment를 갖고 있다. nickname은 서비스에서 사용할 별명을 저장하며 아직 길이 제한을 갖지 않았다. 제한된 길이를 가질 예정이다. email 의 최대 길이는 320이다. RFC 2811에서 찾은 길이 정보는 다음과 같다. '${local-part}''@''${domain}' 1) local-part: The maximum total length of a user name or other local-part is 64 characters..
개요 개발 팀 프로젝트는 github에서 버전 관리를 주로 한다. 이때 누군가 작업을 했고, PR 같이 직후에 팀원의 확인이 필요한 작업이 있을 수 있다. 이때 팀원들에게 '나 작업했어!'라고 일일이 팀 단체 채팅방에 올릴 수도 있지만, 이를 이벤트로써 감지하여 '관련 메시지를 바로 받아볼 수 없을까?'라는 생각을 해볼 수 있다. 해당 부분에 대해 만족할 수 있는 방법이 있고, 이를 웹 후크라고 한다. 이번에 팀 프로젝트를 진행하는 김에 웹 후크를 이용한 자동화 기능을 사용해보기로 했고, 사용 방법에 대해 포스팅하려 한다. 본문 방법 Discord 서버에서 채널을 생성한다. 생성된 채널 설정에 들어간다. 연동의 웹후크에 들어간다. 새 웹후크를 생성하고, 웹후크 URL을 복사한다. Github Reposi..
· JAVA
개요 Bean으로 등록한 객체의 타입이 같지만 다른 이름일 때, 스프링 컨테이너 객체인 ApplicationContext는 타입으로만 Bean을 탐색하려 하면 어떻게 될까를 보기 위해 테스트를 진행했다. 이때 중첩 클래스를 사용하여 진행했고, 실행 중 오류를 맛보게 되었다. 어떤 문제가 있을까? 본문 다음은 내가 작성한 코드이다. // 변경 전 public class ApplicationContextSameBeanFindTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); @Test @DisplayName("타입으로 조회 시 같은 타입이 둘 이상 있으면, 중복 오류..
개요 개발을 하다보면 누군가가 이미 만들어둔 프로그램 또는 코드를 사용하게 된다. 이때 어떤 것은 프레임워크라 하고, 어떤 것은 라이브러리라고 하는데 결국 둘 다 다른 사람이 만든 것이라 차이가 헷갈린다. Spring을 공부하다 이 차이를 깨닫게 되었다. 개념 상 헷갈리는 이 둘, 구분할 수 있을까? 프레임워크 이는 사용했을 때 제어권을 자신이 작성한 코드가 아닌 다른 무엇인가 가졌을 때이다. 예를 들어 Spring의 IoC 컨테이너(Inversion of Controll Container)는 사용하는 객체를 Bean으로써 싱글톤으로 관리해주며, 필요할 때 하나씩 가져올 수 있게 한다. IoC(제어의 역전)이란 프로그램에서 프로그램의 비즈니스를 담당하는 주 객체들이 객체의 생성이나 보조적인 흐름을 관리하..
· Spring
개요 테스트 코드를 작성하며 @Test와 @SpringBootTest와 같은 어노테이션을 보게 되었는데 이 둘의 차이는 무엇인지 찾아봤다. 단위 테스트와 통합 테스트 - 단위 테스트: 스프링이나 컨테이너, JPA 등의 도움 없이 순수하게 자바 코드로 테스트하는 것 - 통합 테스트: 스프링과 컨테이너, JPA 등의 도움을 받아 실제 비즈니스 상에서의 환경과 최대한 비슷하게 만들어 테스트하는 것 -> 사진에서 보이듯이 클래스에 @SpringBootTest를 붙인 것과 붙이지 않은 것의 차이이다. 둘의 차이는? 둘의 가장 큰 차이는 결국 실행 시간이다. 단위 테스트는 메모리 상에서 다른 컨테이너의 도움 없이 자바만 실행하므로 굉장히 빠르게 테스트를 할 수 있는 반면, 통합 테스트는 그렇지 않기 때문에 많은 시..
개요 기존에는 github에서 Repository를 먼저 생성하고, repository의 ssh주소를 복사하여 git clone 방식으로 처음부터 git이 존재하는 디렉토리에서 파일 버전 관리를 해왔다. 그러나 오랜만에 기존 작업물이 존재하고, github에서 새롭게 repository를 만들어 git을 연결하려니 기억이 안 나 찾아봤고, 이를 정리해보려 한다! (2021년 9월에 42서울 피신을 하며 했던 작업인데 너무 오래 전이라 기억이 안 나....) 주의 기존에 .git 디렉토리가 존재했다면 이미 버전관리가 되고 있을 가능성이 있습니다! 방법 먼저 github repository를 생성한다. 터미널에서 git과 연결 시킬 directory로 이동한다. git init 명령어를 입력한다. githu..
· SQL
개요 spring과 JPA를 사용하여 만든 서버 애플리케이션을 빌드하고 실행 했을 때 mysql client 프로그램을 통해 어떻게 데이터베이스에 저장된 데이터를 볼 수 있을까? 방법 데이터베이스 만들기 mysql> create database strcat; Query OK, 1 row affected (0.04 sec) 존재하는 모든 데이터베이스 보기 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | strcat | | sys | +--------------------+ 5 rows in set (0.05..
· Spring
개요 서비스를 만들던 중 실 사용자를 만들게 될 제품을 만드는 것이니 Transaction을 도입하면 좋지 않겠나하는 피드백을 42내 캐비넷 서비스의 동료에게 받게 되었다. 트랜잭션에는 읽기 전용 옵션이 있는데 이를 적용하면 최적화가 된다는 내용을 접했고, CUD와 Read를 나누기 위해 주석으로 서비스 클래스를 나누던 도중, 'findBoard()'와 같이 특정 키를 이용해 Repository를 직접 접근하여 도메인을 가져오는 메서드는 트랜잭션을 걸어야 할까라는 고민을 하게 되었다. // BoardService.java public Board findBoard(String encryptedBoardId) { Long boardId = secureDataUtils.decrypt(encryptedBoard..
jayoon
자윤 블로그