본문 바로가기

전체 글

(174)
블로그 이전합니다. https://velog.io/@heehee
UUID type3, UUID type4 (JAVA) UUID(Universally Unique IDentifier)란? 네트워크에서 id의 uniqueness를 보장하고자 만든 국제 표준이다. UUID 표준에 따라 이름을 부여하면 uniqueness를 완벽하게 보장할 수는 없지만 실제 사용상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용되고 있다. UUID는 32개의 16진수로 표현되며 총 36개 문자(32개 문자와 4개의 하이픈)로 된 8-4-4-4-12라는 5개의 그룹을 하이픈으로 구분한다. UUID type3, UUID type4 아래와 같이 UUID 를 만들어서 데이터베이스에 저장했다고 가정해보자. UUID customerId = UUID.randomUUID(); 그리고 이런식으로 UUID를 가지고 오면다른 결과값이 반환되는걸 확인 할..
[TIL] 0824 JDBC (Java Database Connectivity) ✏️ 오늘의 학습 Flow of JDBC Operation 드라이버 매니저로부터 커넥션을 받아와서 커넥션으로부터 상태를 만든다. 상태를 가지고 문제가 있으면 문제를 핸들링하고, 문제가 없으면 실제 상태를 실행시킨다. 실행시킨후 resultSet을 받아서 결과를 처리한다. 여기서 주의할 점은, 요청이 다 끝나면 statement close, connection close를 해야한다. prepared statement 아래와 같은 코드가 있다고 하자. 디비에서 daisy 의 이름을 가진 customer 정보를 찾는 내용이다. daisy에 해당하는 정보를 잘 가져온다. 그런데 이 코드에는 위험한 요소가 있다. 만약 List names = new JdbcCustomerRepository().findNames("..
[TIL] 0823 테스팅에 대해 알아보자 ✏️ 오늘의 학습 JUnit4, JUnit5 JUnit4는 JUnit.jar(모듈 1개) 하나로 배포가 되어서 확장성이 많이 떨어졌다고 한다. 이를 보완하기 위해 3개의 모듈로 분리된 JUnit5가 나오게 되었다고 한다. JUnit5는 JUnit Platform / JUnit Jupitor / JUnit Vintage의 3개의 모듈이 있다. JUnit Platform : JVM 위에서 돌아가는 테스팅 프레임워크를 런칭하기위한 근간을 제공한다. 테스트를 발견, 계획, 생성하는 TestEngine 인터페이스를 가지고 있고, TestEngine을 통해 테스트를 발견, 실행, 결과를 보여준다. JUnit Jupitor - TestEngine의 실제 구현체는 별도 모듈이다. 모듈 하나가 jupitor-engine..
mvn clean package spring-boot:repackage 오류 mvn clean package spring-boot:repackage 하는 과정에서 2개의 오류를 만났다🥲 1) Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile 다음과 같은 명령어를 실행했더니 아래와 같은 오류가 남. mvn -version 으로 확인해보니 자바 버전이 1.8로 설정되어져 있음. (해당 프로젝트는 자바 16으로 설정되어있는 상태) 자바 버전을 변경해주고, Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile 는 해결 되었지만, 두번째 오류가 났음. 2) Failed to execute goa..
[TIL] 0822 Logger 배운 것 1. Log 레벨 설정 org.prgrms.kdt 에 log level 을 warn 으로 set 하면 org.prgrms.kdt 하위 class 는 전부 warn 로 set 된다. 특정 클래스에서 log level 설정을 다르게 하고싶으면 특정 클래스에서 원하는 레벨로 설정해주면 된다. 그럼 로그 레벨 설정은 어떻게 할까? resources 하위에 logback.xml 파일을 만들어주고 기본 설정으로 다음과 같이 해주었다. 기본 설정은 공식 문서를 참고했다. %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 기본 설정을 보면 root level="DEBUG" 와 같이 되어있는데, 이는 root를 디버그 레벨로 설정한다는 뜻이다. 즉 root 하..
[TIL] 0820 우선순위를 명확하게 🎊 오늘의 느낀점 2일차 과제는 금방할 수 있을거라고 생각했다. (로컬에 파일을 저장하고, 읽어오는것만 구현하면 된다고 생각했고, 맞긴 맞음) 파일을 읽는 부분을 완성하고 저장하는 부분을 작성하려는 순간! 아니? 그럼 데이터가 추가될때마다 로컬에서 파일을 읽어와야한다고? 가 뇌리에 스쳤다. 로컬디스크에서 파일을 읽어오는 작업은..비용이 꽤나 크기때문에 이건 아닌데? 라는 생각이 들었다. 음, 그럼 어떡하지? static으로 데이터를 계속 들고있어야하나? 라는 생각을 하다가 음, 디자인 패턴에서 배웠던 프록시패턴을 적용해볼까? 생각했지만 뭔가 모를 찝찝함이 있어서, 이런 상황에서는 어떻게하는지 이것저것 검색해봤다. 서칭해본 결과로 ehcache를 발견하고, 아! 이거다! 이거로해야겠다! 싶었다. 코드를 어..
[TIL] 0818 Spring 컴포넌트 배운 것 1. Component Scan 기존 코드는 아래와 같이 config에서 직접 bean을 등록해주었다. @Configuration public class AppConfiguration { @Bean public VoucherRepository voucherRepository() { return new VoucherRepositoryImpl(); } } 해당 부분을 아래와 같이 어노테이션기반으로 코드를 바꾸었는데, 빈을 찾을 수 없다는 오류를 뿜뿜..하더라.. 이유가 뭘까싶어서 이것저것 검색해보았는데, 대부분 어노테이션 설정을 빼먹어서 빈등록이 안되어있었다. 나는 제대로 해줬는데 왜 안되지? 싶었다. @Configuration public class AppConfiguration { } @Repo..