전체 글

최근 회사 업무 공부를 위해서는 로우레밸 기술(이라하지만 흔히들 레거시라고 부르는 기술)들을 공부하고 사이드 프로젝트는 최신 기술 및 버전을 사용하다 보니, 버저닝 관리 실패로 발생한 오류였다. 원인쿼리를 날리는 과정에서 SSLHanndshakeException으로 인해 DB Connection 획득을 실패해 conn이 null인 에러가 발생했다.The last packet successfully received from the server was 65 milliseconds ago. The last packet sent successfully to the server was 61 milliseconds ago. at java.base/jdk.internal.reflect.NativeConstructo..
새로 추가된 기능들이 있어서, 오랜만에 통합 테스트를 추가하고 실행하는데 에러가 발생했다. 스프링 어플리케이션 자체 실행에는 문제가 없고 테스트는 정상적으로 실행되지만, 테스트 로그에는 엄청난 양의 에러 로그가 남고 Build 결과에도 에러가 가득했다. 트러블 슈팅 현상 분석 에러 로그가 엄청나게 길지만 결국 아래 로그가 반복되고 있었다. java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/security/ec/SunEC$1 with JaCoCo 0.8.8.202204050719/5dcf34a. at org.jacoco.agent.rt.internal_b6258fc.CoverageTransformer.transfo..
@DataJpaTest를 이용한 Repository 테스트 중 본 어플리케이션 실행에서 발생하지 않던 DDL에서 예외가 발생했다. H2 ↔️ MySQL 문법 차이로 인해 테이블이 제대로 생성되지 않는 것으로 보여서 application-test.properties 를 계속 수정했지만 해결되지 않았다. 문득, 지난 번에도 @DataJpaTest 테스트에서 발생하는 에러를 @AutoConfigureTestDatabase으로 해결한 기억이나서 시도하였고 해결되었다. 그때도 디버깅 과정 기록을 미뤄두고 있었는데, 이 참에 블로깅하고 장기 기억으로 가보자. 문제 분석 시도할 때마다 다양한 예외가 발생하고 인터넷에도 다양한 예외 케이스가 있는데, 데이터베이스 설정 문제이거나 DDL 혹은 SQL 문법 오류다. 공통적..
소마 멘토님과 배포 DB의 데이터를 직접 수정하는 일에 대해 이야기하는 도중에 터미널을 켜는 나를 보고 깜짝 놀라며 터미널로 관리를 하고 있냐고 물었던 것이 아직도 기억난다. 컬럼명 조차도 제대로 보이지 않는 mysql cli를 썼던 이유를 생각해봤더니, 백엔드 개발을 여기저기서 배울 때 이렇게 하는 것만 봐왔고 프로젝트 개발까지만 하고 유지보수 단계까지 가보지 않아 불편함을 크게 느껴보지 못해서 였던 것 같다. Datagrip을 배우면서 신세계를 맛보고 여기저기에 츄라이해왔는데, 불호하는 사람은 못본 것 같다. 하나 아쉬운 점은 public subnet에 있어야만 가능해서 보안적으로 아쉽다는 것이었는데, 내가 모르는 것이였다.... SSH Tunneling을 통해 안전하면서도 편하게 DB를 다룰 수 있..
이전 노션 블로그의 Transaction 이란? (2020.12.22)로부터 마이그레이션된 글입니다. 트랜잭션, Transaction 이란? Transaction이란, DB의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다. DB의 상태를 변화시킨다는 것은 아래의 SQL을 이용해서 DB에 접근하는 것을 의미한다. SELECT INSERT DELETE UPDATE 착각하지 말아야 할 것은 작업의 단위는 SQL 한 문장이 아니다. 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것이 작업의 단위다. 계시판을 예를들어 보면, 사용자가 게시글을 작성하고, 업로드 버튼을 누른다. 그 후에 다시 게판에 돌아왔을 때, 게시판은 자신의 글을 포함한 업데이트된 게시판을 보게 된다. 이러한 상황을 DB 작업..
이전 노션 블로그의 빌드 관리 도구 Maven과 Gradle 비교하기 (2021.01.06)로부터 마이그레이션된 글입니다. 빌드 관리 도구란? 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램 프로젝트에서 작성한 java 코드와 프로젝트 내에 필요한 각종 xml, properties, jar 파일들을 JVM이나 WAS가 인식할 수 있도록 패키징해주는 빌드 과정 = 빌드 자동화 도구 프로젝트에 필요한 외부 라이브러리들의 종류와 버전들, 종속성 정보를 명시하여 자동으로 다운로드하고 관리하는 도구 Maven Maven은 Java용 프로젝트 관리도구로 Apache의 Ant 대안으로 만들어 졌다. 빌드 중인 프로젝트, 빌드 순서, 라이브러리 종속성 관계를 pom.xml 에 명시한다. 외부저장소에..
이전 노션 블로그의 SQL Tutorial (2021.01.17)로부터 마이그레이션된 글입니다. Where SQL WHERE | Basic SQL - Mode Analytics SQL WHERE 절 SELECT 과 FROM 을 사용하여 어떻게 데이터를 조회하는지 안다면, 다음은 WHERE 을 이용하여 데이터를 필터링하는 것 입니다. SELECT * FROM tutorial.us_hosting_units WHERE month = 1 📌 이 절은 언제나 SELECT , FROM , WHERE 순서여야만 합니다. WHERE은 어떻게 작동할까? SQL WHERE 절은 영어 문장 해석하듯이 작동합니다. 위의 쿼리는 month column이 1의 값을 가진 row 만 포함한다는 점만 빼면, SELECT * FROM..
이전 노션 블로그의 SQL Tutorial (2021.01.17)로부터 마이그레이션된 글입니다. Aggreate Functions aggregate functions(집계 함수)은 항상 사용하게 될 것이니 익숙해져야 한다. arithmetic operators는 한 행의 열간의 연산만 수행하지만, aggregate functions은 행 전체에 걸쳐서 수행할 수 있다. COUNT Counting all rows COUNT 는 특정 열의 숫자를 세리는 aggregate function이다.. 아래의 두 SQL 문의 결과는 같다. SELECT COUNT(*) FROM tutorial.aapl_historical_stock_price SELECT * FROM tutorial.aapl_historical_sto..
이전 노션 블로그의 java.sql.SQLException: Incorrect string value (2021.03.28)로부터 마이그레이션된 글입니다. java.sql.SQLException: Incorrect string value: '\xEC\xB0\xBD\xEC\xB0\xBD...' for column `mm_server`.`restaurant`.`name` at row 1 Query is: insert into restaurant (deliveryable, description, location, name, price, type) values (?, ?, ?, ?, ?, ?), parameters [0,,3,'창창국밥',0,0] java thread: http-nio-8080-exec-1 at..
이전 노션 블로그의 스프링의 application.properties 설정 (+ ddl 설정, DB url/port) (2021.07.26)로부터 마이그레이션된 글입니다. application.properties spring.jpa.hibernate.ddl-auto=update spring.jpa.generate-ddl=false spring.datasource.url=jdbc:mariadb//{PATH}/{DATABASE} spring.datasource.username={USERNAME} spring.datasource.driver-class-name=org.mariadb.jdbc.Driver jpa ddl 설정 ddl-auto update : 기존의 스키마를 유지하며 JPA에 의해 변경된 부분만 추..
sckwon770
sckwon770