전체 글 349

Spring boot Transactional annotation

Transaction이란 DB에서의 상태 변경을 위해 수행하는 작업의 단위 간단하게 말하면 CRUD를 통해 DB에의 접근을 진행하는 것이다. Transaction은 ACID라는 성질을 갖는다. Atomicity(원자성) 트랜잭션은 모두 DB에 반영되거나, 그렇지 않으면 모두 반영되지 않아야 한다. Consistency(일관성) 트랜잭션 처리 결과는 일관성이 있어야 한다. 즉, 트랜잭션 진행 도중 DB가 변경되어도 처음 트랜잭션 진행을 위해 참조한 데이터 기준으로 적용 Isolation(독립성) 둘 이상의 트랜잭션이 동시에 수행되고 있는다면 다른 트랜잭션의 연산에는 끼어들수 없다. Durability(지속성) 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 한다. Transactional a..

java의 Equals and HashCode(feat. HashMap)

Equals and HashCode(feat. HashMap) 보통 Spring boot를 사용할 때에 class에서 equals랑 hashcode를 같이 정의하고는 한다. 그리고 lombok에는 아예 @EqualsAndHashCode 라는 애가 있어 두개를 같이 사용할수도 있다. 그럼 이녀석들이 무엇일까? Default 먼저 이런 class를 정의해 주자. 해당 class는 RyooChan의 intelligence와 look을 인자로 갖고 있다. 이런 식으로 Object를 가져와서 값이 동일한지를 검사해 준다. Test결과 두 객체는 서로 다르다. 참고로 저거 equals를 조금 공부해 봤으면 아니 얘는 값을 비교하는건데 왜 달라?? 라고 생각할 수 있을거같은데 Object를 equals를 비교하면 요..

이론 정리/java 2022.12.25

java hashmap의 시간복잡도에 관해서

HashMap은, Map인터페이스의 컬렉션 중 하나이다. 이 HashMap은 key-value로 하나의 key가 하나의 value를 갖도록 한다. 이전에 ArrayList와 LinkedList의 차이점에 대한 글을 작성한 적이 있다. 각각의 내용들에 대해서 생각해 보면, 두 자료구조 모두 값을 읽어오거나 변경할 때에 시간복잡도를 고려해줄 필요성이 있었다. 근데 이 HashMap은 값을 넣거나 변경할 때 모두 시간복잡도가 O(1)이다!! 이게 어떻게 가능할까? Put의 시간복잡도 HashMap의 동작 방식 위에서 설명하였듯 HashMap은 하나의 key가 하나의 value를 갖는다. 이 key를 찾아가기 위해서 어떠한 key가 입력되면 java에서는 이곳에 해시함수를 적용시켜 고유 index를 만든다. 예..

이론 정리/java 2022.12.25

generic

java 제네릭(generic) type? Data type을 일반화한다는 의미. generic을 사용해서 컴파일 하는 동안 클래스 혹은 메서드에서 사용할 내부 데이터 타입을 지정할 수 있다. -> 해당 클래스에서 사용할 데이터의 타입을 외부에서 지정한다. 데이터 타입을 미리 지정한다?? 한번 보여드림ㅇㅇ 일단 위에서 설명한것처럼 generic은 클래스 혹은 메서드 에서 사용하는 친구이다. class RyooChan { private T intelligence; void setIntelligence(T intelligence) { this.intelligence = intelligence; } T getIntelligence() { return intelligence; } }참고로 이거는 Type이라 T..

이론 정리/java 2022.12.22

추상 팩토리 패턴

추상 팩토리 패턴 tags: Tag(GoF디자인 패턴) 서로 관련있는 여러 객체를 만들어주는 인터페이스 이걸 사용하면 어떤 클래스의 인스턴스를 사용하는지 감출 수 있다. 그래서 팩토리 메서드랑은 뭐가 다른데? 하면 사실 내부 구조는 거의 비슷한데 얘는 Client에서 정보를 숨기는데에 집중한다. (이거 후술) 해당 로직을 구현하는 Client에서 구체적인 class를 사용하는 대신, 추상화된 메서드를 통해 구현하도록 하는 것이다. 추상 팩토리 패턴 세팅 추상적인 interface를 만들어준다. -> 추상 Factory 패턴 public interface ShipPartsFactory { Anchor createAnchor(); Wheel createWheel(); }그리고 저기 Anchor, Wheel도..

이론 정리/java 2022.12.13

팩토리 메소드 패턴

펙토리 메소드 패턴 tags: Tag(GoF디자인 패턴) 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다. 그니까 그 껍데기를 추상적인 Interface 껍데기로 감싸는 것이다. Factory역할을 할 interface를 만들어준다. 이 interface내의 추상화 메소드를 하위 클래스에서 구체적으로 만들어준다. 그리고 이거의 결과로 나오는것도 문제 상황 public class Client { public static void main(String[] args) { Client client = new Client(); Ship whiteship = ShipFactory.orderShip("WhiteShip", "fbcks97@naver.com"); Ship blackShip = ShipFacto..

이론 정리/java 2022.12.12

협업 전략

Gitlab Issue 및 kanban Gitlab에서 Issue를 통해 작업 현황 및 내역 공유 issue - Boards에서 kanban과 같은 형식으로 Issue 생성 및 관리 가능 Issue발행 Issue를 통해 프로젝트 관련 문의와 진행 사항 공유 가능 Issue에서는 Milestone 진행 예정 목표 기입 하나의 마일스톤은 여러 이슈를 가질 수 있다. Labels 해당 Issue의 목적 필요에 따라 Labels 생성 가능 등의 여러 특성을 활용해 사용 가능 Issue Template 이슈의 내용은 필요에 따라 사용 가능하며 해당 프로젝트의 메인 브런치에서 .gatlab/issue_templates 를 통해 미리 convention을 정의한 Template 작성이 가능하다. issue_templ..

기타 2022.12.08

local VM에 fluent 구성하기!

local VM에 fluent 구성하기! 사전 준비 먼저 fluent 설치 이전에 ruby(3.0이상)과 bundler를 설치해야 한다. 밑준비 1. Ruby와 Passenger빌드에 필요한 헤더파일 설치 yum install openssl-devel readline-devel zlib-devel curl libyaml-devel2. Apache 설치 yum install httpd httpd-devel3. ImageMagick 설치 yum install ImageMagick ImageMagick-develruby 설치 1. local 위치로 들어가기 cd /usr/local2. 루비 tar파일 가져오기 wget http://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0...

싱글톤 패턴

싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 인스턴스를 오직 한개만 만들 수 있어야 한다. 그렇게 만들어진 하나의 인스턴스에 글로벌하게 접근할 수 있어야 한다. 이제 설정이나 그런것들은 싱글톤으로 해주면 될것이다. private Settings() {} private static Settings instance; public static Settings getInstance() { return instance } 이렇게 해주면 instance를 필요할 때에 getInstance를 호출해서 만들어 줄 것이다. 근데 싱글톤은 하나의 인스턴스만을 가질수 있다고 했다. 어떻게 이 싱글톤 패턴을 구현해 줄까? 1. private 생성자에 static메소드를 사용해서 싱글톤 구현 private Setting..

이론 정리/java 2022.12.06

java의 volatile

java의 volatile java변수를 Main Memory에 저장하겠다는 것이다. 이게 뭐냐...하면 말그대로 main memory에 값을 저장한다는거다. 사실 이거 이해하려면 cache에 대해서 조금 알고오면 편하다. 자바는 사실 값을 저장하거나 읽어올 때에 이거를 CPU cache를 통해 진행한다. 이렇게 되면 속도에 이득이 필요하지만... 멀티 쓰레드 환경에서 좀 문제가 있을 수 있다. 멀티 쓰레드에서의 CPU cache 문제 MultiThread에서는 보통 Task동안 Main Memory에 있는 값을 CPU에 Caching한다. 그리고 이거를 읽거나, 쓰거나 등등의 연산을 취하게 되는데 Main Memory에 특정 값이 저장되어 있다. (RyooChan = "Genius") 1번 쓰레드가 M..

이론 정리/java 2022.12.06