본문 바로가기

분류 전체보기

(93)
Git - Branching Model 브랜치 전략은 왜필요할까? Git은 복잡하며, work flow는 아무런 제약이 없다. 그렇기 때문에 조직의 특성과 성향에 맞는 Branching Model을 찾아야하며, 일정 규칙이 필요할 것이다. 조직에 맞게 잘 정의한 work flow는 효율을 크게 상승시킬 수 있다. 개발 History 관리 가능 코드 리뷰를 통한 코드의 품질 향상 브랜치 관리 배포 관리를 통한 사고 & 장애 대응가능 (1) Git Flow Model Vincent Driessen이 제시한 model 가장 보편적인 branching model이며, tool도 구현되어 있다. 하지만, 복잡하고 애매하며 특히 개발 이력 관리가 많이 어렵다는 단점이 존재한다. 예를들어, 우아한 형제들에서 제시한 방법이 Git Flow를 Base로 하고..
Spring - 자주사용하는 Annotation 정리 @Autowired : 의존성을 주입하여 자동을 객체를 생성해주며 메소드 위에 사용할 경우 기본생성자를 만들어준다. @Autowired 는 타입에 따라 매핑되기 때문에 동일 인터페이스를 상속받을 경우 구분의 모호함이 발생할 수 있음. @Configuration : 스프링 설정 클래스 선언 @Bean : 스프링 빈으로 선언. (스프링 컨테이너에서 관리하는 하나의 객체) (!) Bean은 싱글톤 객체이므로, 몇번을 호출하더라도, 한 개의 객체만을 생성하는 특징을 지닌다. @Scope : 스프링에서 Bean으로 지정된 객체는 기본적으로 싱글톤 객체로 관리되지만, 상황에따라서 다르게 부여할 수 있다. default는 singleton. ex) @Scope("prototype") - singleton : 기본 싱..
Spring - 스프링 프레임워크 기본개념 정리 1] 개요 Spring FrameWork는 EJB(Enterprise Java Bean)를 주 프레임워크로 사용할 때 불편했던 부분을 해소 (EJB가 너무 스펙이 좋지않아서..) 2003년 6월 Apache 2.0 License로 공개가 되었다 = 장점 1] 생산성 => 스프링은 개발자가 이론적으로는 알아야 하는 부분이 많지만, 결과적으로 작성하는 코드의 양은 줄어든다. 2] 품질보증 => 프레임워크는 개발에 필요한 구조가 절반정도는 만들어져 있기 때문에, 필요한 부분만 조립하는 형태로 개발이 가능하다. 프레임워크를 사용하면 회사 입장에서는 일정한 품질이 보장되는 결과를 얻을 수 있다. 3] 유지보수 => 코드의 의존관계가 명시되지 않으므로 결합도가 낮아지기 때문에 유지보수가 편리해진다. = 스프링 프레..
Java - 자바 객체 지향의 원리와 이해(개념정리) - 2편 안녕하세요~ 개발을 잘하고싶은 개발자입니다. 1편에 이어서 2편 이야기를 진행합니다. [1편 참조] 자바 객체 지향의 원리와 이해(개념정리) - 1편 안녕하세요~ 개발을 잘하고싶은 개발자입니다. 여기에서는 책을 통해서 기본 개념을 정리해보는 시간을 가지도록 하겠습니다. 제가 읽을 책은 [스프링 입문을 위한 자바 객체 지향의 원리와 이 xggames.tistory.com - 객체지향 프로그래밍 기본 지식 두번째 이야기 abstract - 추상 메서드와 추상 클래스 : 추상 메서드(Abstract Method)는 선언부는 있는데 구현부가 없는 메서드를 말한다. 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스(Abstract Class)로 선언해야 한다. - abstract Class, Meth..
Git - 동작 정리 (심화편) - fast-forward (빨리감기) : merge를 진행할 때의 방법중의 하나. pull은 fetch + merge의 두가지 동작이 이루어지는데 merge를 진행할 때 보통은 merge commit을 생성하여 합치지만, fast-forward merge는 단순하게 HEAD만 이동시켜서 코드를 업데이트 시켜준다. - fast-forward merge - 3-way merge (출처: backlog.com/git-tutorial/kr/stepup/stepup3_1.html) => 두가지 merge방법 모두 conflict가 일어날 수 있으므로, conflict가 발생할 경우, 풀어주면서 merge를 진행하면 되겠지만, history상으로 보기 좋지 않을 것이다. 그래서 앞서 학습했던 rebase를 사용하..
Git - 동작 정리 (기본편) - 원격 저장소와 로컬 저장소 Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공 - 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소. - 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소 - 커밋 (commit) : 파일 및 폴더의 추가/변경 사항을 저장소에 기록한다. 일반적으로, 우리가 작업한 내용은 저장(Save)하는 개념이며 Git Branch에서 하나의 작업단위가 될 것이다. (!) 여기서 stage영역이란? : 실제로 커밋을 진행하기 위해 준비하는 공간이라고 생각하면 된다. 그 반대로는 unstage영역이라고 하는데, 파일이 변경은 되었지만 커밋은 하지않는 영역이..
Java - 자바 객체 지향의 원리와 이해(개념정리) - 1편 안녕하세요~ 개발을 잘하고싶은 개발자입니다. 여기에서는 책을 통해서 기본 개념을 정리해보는 시간을 가지도록 하겠습니다. 제가 읽을 책은 [스프링 입문을 위한 자바 객체 지향의 원리와 이해] - 김종민지음 입니다. 자바와 친해지기 위해 책을 읽고 관련 지식을 정리해놓고자 합니다. (JAVA 카테고리이기때문에, 스프링 관련 내용은 정리하지 않았습니다) - 자바 프로그램의 개발과 구동 JVM : (Java Virtual Machine) 자바 가상 기계. JRE : (Java Runtime Environment) 자바 실행 환경. => 윈도우, 리눅스, 애플 Mac OS등 각 플랫폼마다 JAVA에서 사용할 수 있도록 한다. JDK : (Java Development Kit) 자바 개발 도구. [현실 세계] 프로..
JPA - 기본 개념 및 내용정리 ORM(Object-Relational-Mapping)이란? : 객체와 관계형 데이터베이스(RDBMS)의 데이터를 자동으로 연결해 주는 것을 말한다. 객체 - 관계 매핑을 통해 프로그램의 복잡도를 줄이고(트랜잭션 처리 등) 작업을 더 편리하게 할 수 있도록 돕는다. - ORM은 객체지향 패러다임을 관계형 데이터베이스에 보존하는 기술이다. - 객체지향의 구조가 관계형 데이터베이스와 유사하다는 점에서 시작되며, 객체지향을 자동으로 관계형 데이터베이스에 맞게 처리해주는 기법에 대해서 아이디어를 내기 시작했고 그것이 ORM의 개념이 자리잡는 시작점이였다. - SQL Query가 아닌, 메소드의 call을 통해 데이터를 제어할 수 있다. - ORM의 장점 1] 비즈니스 로직에 더 집중할 수 있다. 2] 재사용(생..
Java - lambda와 Stream JAVA 8에서 추가된 새로운 개념들중.. 람다식(lambda)와 스트림(Stream)에 대한 정리 람다식이란? : 메소드를 하나의 간결한 식으로 표현한 것..함수를 변수처럼 사용할 수 있다. 익명 함수(anonymous function)라고도 불린다. 람다는 오직 1개의 메서드만을 가지는 인터페이스(아래에서 다시 설명하는데, 이러한 인터페이스를 Funcation Interface라 한다)의 익명 클래스 구현체를 우아하게(?) 치환할 수 있는 표현법으로, 람다식은 이 인터페이스의 인스턴스가 된다. - 람다식의 기본구조 (타입 매개변수, ..) -> { 실행문;.. }; Test test = (int num) -> {System.out.println("number: "+num);}; // 자료형 생략 Te..
Java - JVM(Java Virtual Machine)의 메모리 영역 - 간단 정리 = 힙 영역(Heap Area) : JVM이 시작될 때 생성되어 애플리케이션이 동작하는 동안(=런타임) 동적으로 할당하여 사용되는 메모리 영역. - 힙 영역에 생성된 인스턴스와 배열은, 스택 영역의 변수나 다른 객체의 필드에서 참조한다 - new 연산자로 생성된 객체(인스턴스)와 배열을 저장 - 힙 영역의 사용기간 : 참조하는 변수나 필드가 없다면, 의미 없는 객체가 되어 GC의 대상이 되어버린다. GC는 이 Heap영역에서 발생한다. - 힙 영역은 모든 스레드에서 공유한다. 그 이유는, 스레드는 메모리 구조에서 스택(Stack)영역을 분할하여 메모리를 사용하기 때문이다. 스레드는 각각의 스택영역을 가지지만, 힙(Heap) 영역은 하나로 공유해서 사용하기 때문이다. 따라서 멀티 프로세스(여러개의 프로세스..