전체 글

초보 개발자의 지식 공유의 장
스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈(bean)이라고 부른다.(자바빈 또는 엔터프라이즈 자바빈EJB에서 말하는 빈과 비슷한 오브젝트 단위의 어플리케이션 컴포넌트) 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC오브젝트를 빈 팩토리(bean factory)라고 부른다. 빈 팩토리보다는 이를 좀 더 확장한 애플리케이션 컨텍스트(application context)를 주로 사용한다. 스프링 IoC의 용어 정리빈(bean)스프링이 IoC방식으로 관리하는 오브젝트라는 뜻(스프링이 직접 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.)빈 팩토리(bean factory)IoC를 담당하는 핵심 컨테이너를 가리킨다. 빈을 등록하고, 생성하고, 조회하고 돌려주..
1. POJO 기반의 구성스프링은 다른 프레임워크들과 달리 관계를 구성할 때 별도의 API을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어있음 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미함개발자는 가장 일반적인 형태로 코드를 작성하고, 실행할 수 있기 때문에 생산성에서도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수있다는 장점이 생김 2. 의존성 주입(DI)를 통한 객체 간의 관계 구성"제어의 역행"메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미 개발자는 필요한 부분을 개발해서 '끼워 넣기'의 형태로 개발하고, 실행하면 됨제어의 역전은 스프링에서만 있는 개념일까?=> 제..
애플리케이션 아키텍처 책임과 성격이 다른 것을 크게 그룹으로 만들어 분리해두는 것을 아키텍처 차원에서는 계층형 아키텍처(layered architrecture)라고 부른다. 또는 계층이라는 의미를 가진 영어 단어인 티어(tier)를 써서 멀티 티어 아키텍처라고도 한다.(보통 3계층 3-tier 혹은 3-layer)애플리케이션이라고도 한다. 3계층 아키텍처와 수직 계층3계층 아키텍처는 백엔드의 DB나 레거시 시트메과 연동하는 인터페이스 역할을 하는 데이터 엑세스(DataAccess)계층비즈니스 로직을 담고있는 서비스 계층주로 웹 기반의 UI를 만들어내고 그 흐름을 관리하는 프레젠테이션 계층으로 구분클라이언트 프레젠테이션 계층 서비스계층 데이터 엑세스 계층 DB/레거시 데이터 엑세스 계층DAO 계층이라고 불..
스프링을 이용한 파일업로드 프로젝트=> https://github.com/ksh901016/file-upload 웹에서 파일 업로드는 일반적으로 "multipart/form-data"라는 방식으로 데이터를 전송하며,스프링MVC에서는 multipart형식으로 전송된 데이터를 핸들링할 수 있는 기능을 지원해준다.=> 스프링 MultipartResolver 사용 우선 사용할, multipartResolver를 빈으로 등록해 준다.(dispatcher-context.xml에 등록)123 Colored by Color Scriptercs스프링이 기본으로 제공하는 MultipartResolver는 CommonsMultipartResolver 이다.CommonsMultipartResolver는 CommonsFileU..
객체지향프로그래밍(Object Oriented Programming)의 특성은 크게 추상화, 캡슐화, 상속, 다형성이 있음=> 루틴을 하나의 "독립된 객체"로 바라보는 시선=> 기존에 만들었던 내용을 쉽게 상속, 다형성 등을 이용해 재사용 가능 추상화(Abstraction)추상화를 통해서 Class를 만들어 놓고, 상세한 부분들을 채워나가는 것공통의 속성이나 기능을 묶어 이름을 붙이는 것불필요한 부분을 무시하고 필요하고 공통점만을 다루어 현실의 복잡성을 극복하고 목적에만 집중캡슐화(Encapsulation)객체의 내용 중 숨기고 싶은 부분은 외부에서 접근할 수 없다.(정보은닉 기능 => 접근제어)객체 스스로가 자신의 상태를 책임데이터 캡슐화 - 객체는 상태(멤버변수)와 행동(메소드)을 하나의 단위로 묶는..
LinkedList에서 빠른포인터와 느린포인터를 사용하여서 중간노드를 구하는 방법느린포인터가 한 칸 갈때, 빠른포인터는 두 칸 증가한다.빠른포인터가 마지막에 다달았을때, 느린포인터가 가르키는 위치가 중간 노드 우선, 테스트에 필요한 구현체 구현 - 간단한 Node 클래스12345678public class Node { int val; Node next; Node(int val){ this.val = val; }} cs- 1~7까지의 linkedList 생성123456789101112131415161718public static Node makeLinkedList(){ Node head = new Node(1); Node node1 = new Node(2); Node node2 = new Node(3); ..
Git 스테이징단계 이해Git은 다른 형상 관리시스템과 다르게 소스 코드를 직접 추가하거나 변경하지 않더라도 이를 인지하지 못하며 Git add 명령을 통해서만 인식할 수 있다. => Git의 형상 관리가 3가지 영역으로 진행되기 때문(출처 : http://devstory.ibksplatform.com/2017/09/git-1-git-git.html)워킹 디렉터리 : 소스 코드를 작업하는 영역으로 코드를 추가, 수정, 삭제한느 작업이 이루어지는 영역을 의미스테이징 영역 : 워킹 디렉터리에 Git add 명령을 실행하면 파일들은 Git의 스테이징 영역으로 이동하며 이를 통해 소스 코드의 상태 정보를 확인할 수 있다.저장소 영역 : 스테이징 영역에 있는 소스 코드에 Git commit 명령을 실행하면 최종적..
메이븐(Maven) 빌드 생명주기앞에서도 설명했듯이메이븐 실행 단위를 골(Goal)이라고 하며, 골들이 상호 연관해 실행되는데 그러한 관계를 메이븐 골의 생명주기라고 한다. CleanValidate => Compile => Test => Package => InstallDeploy로 구성되어있으며각 골들이 하는 역할을 간단히 설명 Clean=> build 후 만들어지는 Target의 디렉터리를 삭제한다.Validate=> 올바른 Pom.xml인지 확인한다.Compile=> 의존성들을 가져오고, Target/classes 디렉터리에 빌드한다.Test=> 테스트 코드를 실행한다.Package=> Test 상태가 성공적으로 실행된 다음에 실행되며 War 나 Jar 파일같은 결과물을 생성한다. Install=>..
pom.xml, 에서 사용되는 메이븐 기본 Properties 빌드'target' 폴더${project.build.directory} = ${pom.build.directory}'target/classes' 폴더${project.build.outputDirectory}프로젝트 이름${project.name} = ${pom.name} 프로젝트 버전${project.version} = ${pom.version} = ${version}최종 파일 이름${project.build.finalName} 환경 변수시스템 PATH{env.PATH} 시스템 JAVA_HOME{env.JAVA_HOME} etcpom.xml이 위치하는 디렉터리${basedir}
Jar안에 있는 resource파일 읽기 내가 만든 코드 기능 중에 classpath안에 있는 resource를 읽어들이는 기능이 있었다.(server.config.json을 읽는다.) 그런데 그 프로젝트를 Jar(Executable jar) 로 묶은 후 실행을 하니, resource를 찾을 수 없다는 에러가 났다. (IDE에서는 오류 안남) => java.io.FileNotFoundException 자세한 로그는 아래와 같다. file:/C:/workspace/web-server-project/target/web-server-project-0.0.1-SNAPSHOT.jar!server.config.json java.io.FileNotFoundException: class path resource [se..
깡냉쓰
평범한 개발자 노트