본문 바로가기

전체 글

(183)
TIL) @Transactional Propagation, 스프링에서 초기화 코드를 넣기 1. @Transactional Propaction 스프링에서 트랜젝션을 설정하는 @Transactional 에는 전파레벨을 설정할 수 있다. @Transactional(propagation = Propagation.) PROPAGATION_REQUIRED 디폴트 값. 부모 트랜잭션이 있을 때 부모 트랜잭션에 참여. 없으면 새로운 트랜잭션 시작. 자식 트랜잭션에서 예외가 발생하면 부모 트랜잭션까지 모두 롤백. PROPAGATION_SUPPORTS 부모 트랜잭션이 있을 때 부모 트랜잭션에 참여. but 없으면 트랜잭션 없이 동작. PROPAGATION_MANDATORY 부모 트랜잭션이 있을 때 부모 트랜잭션에 참여. 부모 트랜잭션이 없다면 Exception 발생. PROPAGATION_REQUIRES_NE..
TIL) TINYINT/BIT, Spring Content-type, 코드를 DB 에서 읽어와서 처리할 때 resource 1. TinyInt / bit [TINYINT] numeric 데이터일 뿐, boolean 이 아니다. 개발자들이 에플리케이션에서 boolean 처럼 동작하게 한 것 뿐이다. 1byte (8bits) 를 차지한다. SIGNED TINYINT = -128 ~ 128 / UNSIGNED TINYINT = 0 ~ 255 [BIT] 2진 데이터일 뿐, boolean 이 아니다. (Mysql 에서) 개발자들이 에플리케이션에서 boolean 처럼 동작하게 한 것 뿐이다. bit(1) 이면 1 bit 의 저장용량을 차지할 것 같지만, bit(1) ~ bit(64) 모두 1byte 를 차지하며, 만약 bit(1) 타입의 column 이 3개라면 각각 1byte 씩 3bytes 의 용량을 차지한다. => tinyint ..
TIL) @SqlResultSetMapping, Kotlin-Fold, Reduce 1. @SqlResultSetMapping jpa 를 사용하다 보면, 쿼리문의 결과를 Entity 객체의 형태 이외의 POJO 객체 형태로 받고 싶을 때가 있다. 예를 들면 아래의 경우가 있을 수 있겠다. @Transient 필드를 쿼리 결과에 포함시키고 싶은 경우 Union 의 결과를 하나의 객체로 결과를 받고 싶은 경우 위를 포함해서 native 쿼리를 통해 엔티티에 없는 새로운 컬럼을 추가한 어떤 객체로 결과를 반환받고 싶은 경우 이럴 때 두 단계를 통해 POJO 객체로 쿼리 결과를 매핑할 수 있다. 쿼리 결과 - 객체 매핑 정보 설정 : @SqlResultSetMapping 쿼리 작성 : @NamedNativeQuery, EntityManager.createNativeQuery() 1-1. @Sq..
TIL) cherry-pick 외 git 각종 취소 명령어들, ORIG_HEAD 1. Cherry-pick 좋은 체리와 나쁜 체리를 골라서 최상의 체리를 골라내는 어원이라고 한다. 깃에서는, 다른 브랜치의 필요한 코드(커밋) 을 뚝 때와서 붙이고 싶은 브랜치에 붙일 때 사용한다. 존재는 알아도, 잘 몰랐던 이유가 잘 쓸 일이 없어서 였는데 아는 만큼 보인다고 요즘 쓸 일이 슬슬 생기기 시작한다. 체리픽을 하기 위해 먼저 준비할 것은, 가져오고 싶은 커밋(어떤 브랜치든지)의 해시값을 알아내는 것이다. 이는 뭐 git log 명령어로 쉽게 알 수 있다. 이후 코드를 붙여넣고 싶은 브랜치로 가서 아래 명령어를 실행한다. git cherry-pick // 커밋 하나 체리픽 git cherry-pick // 커밋 여러개 체리픽 git cherry-pick .. // 앞의 해시 커밋 다음 커밋..
TIL) 쉘 스크립트, linux screen 명령어 1. 쉘 컴퓨터를 이용해서 개발할 때에는 소프트웨어와 하드웨어가 존재한다. 리눅스의 커널 이란 것은 하드웨어의 통제권을 가지며 소프트웨어 에플리케이션과 상호작용하며, 하드웨어 자원을 할당하고 사용하게 해준다. 뭐 쉽게말해서, 자바 서버 하나 띄우면, 결국에 그 컴퓨터의 CPU 와 메모리 등등 하드웨어 자원을 사용하게 될 텐데, 커널에게 가서 자바 에플리케이션 : 좀 사용하게 해줘 ! 커널 : 자 여기 너가 쓸 CPU 랑 메모리. 라고 하는 것이다. 이 커널이란 것은, 컴퓨터 외계인이라 사람말을 알아듣지 못한다. 우리가 하드웨어 자원이 필요해서 커널에게 말을 걸고 싶으면, 커널이 알아들을 수 있는 말로 통역해주는 통역사가 필요하다. 이를 쉘 이라고 한다. 쉘 : 유닉스 계열의 시스템에서 사용하는 대화형 인..
TIL) pull or Merge 취소, SFTP 서버제공 사이트, CONTENT_DISPOSITION, @Async 1. pull or Merge 취소 실수로 pull 받아 버린 경우 git reset --hard ORIGIN_HEAD 2. SFTP 서버제공 사이트 이번에 프로젝트에서 SFTP 를 사용했는데, 테스트시 SFTP 원격 서버가 필요했는데, 제공하는 사이트가 있었다. https://www.sftp.net/public-online-sftp-servers Free Public SFTP Servers - SFTP.net Do you want to quickly test your SFTP client and don't have your own SFTP server? Try one of these publicly accessible SFTP servers. Most of them only allow read-only..
TIL) 객체의 커스텀 직렬화 1. 객체의 커스텀 직렬화 직렬화 관련 TIL) 을 세번쨰 연속 쓰고 있다.. 뭔가 겹치는 부분도 있고 해서 좀 찝찝하지만.. 새로운 부분이 있어서 그냥 적는다.. 이번에 해본 내용은 객체의 커스텀한 직렬화이다. 일단 클래스를 하나 만든다. class Family( val name: String, val number: Int, val people: List ) class FamilyPeople( val name: String, val age: Int ) 1-1 객체의 커스텀 Serializer/Deserializer [직렬화] class FamilySerializer: JsonSerializer() { override fun serialize(value: Family, generator: JsonGene..
TIL) 터미널에서 sftp 접속, Jackson2HttpMessageConverter 1. 터미널에서 sftp 접속하기 sftp -o Port=[포트번호] [계정 ID]@[접속 주소] 이후에 비밀번호를 치라 그러면 치면 접속이 되며 sftp> 표시가 보인다. sftp> get 파일이름 // 파일 다운로드 받기 sftp> put 파일이름 // 파일 업로드 하기 해당 루드의 모든 폴더, 파일을 다운로드 받는 방법 get -r * ls, cd 같은걸로 파일을 보면 된다. 2. Jackson2HttpMessageConverter MessageConverter 서버로 들어오는 데이터를 객체로 변환하거나, 비즈니스 로직으로 처리되어 가공된 객체를 응답으로 보내기 위해 Http 메세지로 변환하는 변환기이다. 여러가지 변환기 중에, Json 을 객체로 변환하는 라이브러리 중 스프링은 기본으로 Jacks..