diff --git a/_config.yml b/_config.yml index af7d57221b02..901b0ab5274f 100644 --- a/_config.yml +++ b/_config.yml @@ -22,11 +22,11 @@ title_separator : "-" subtitle : # site tagline that appears below site title in masthead name : "Your Name" description : "An amazing website." -url : # the base hostname & protocol for your site e.g. "https://mmistakes.github.io" +url : "https://sdusk0731.github.io" baseurl : # the subpath of your site, e.g. "/blog" repository : # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes" teaser : # path of fallback teaser image, e.g. "/assets/images/500x300.png" -logo : # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png" +logo : "/assets/images/1000027023.webp" # path of logo image to display in the masthead, e.g. masthead_title : # overrides the website title displayed in the masthead, use " " for no title breadcrumbs : # true, false (default) words_per_minute : 200 diff --git a/_data/navigation.yml b/_data/navigation.yml index 6f30866f3bed..4cbb86f05baf 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -1,7 +1,7 @@ # main links main: - - title: "Quick-Start Guide" - url: https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/ + - title: "Category" + url: /categories/ # - title: "About" # url: https://mmistakes.github.io/minimal-mistakes/about/ # - title: "Sample Posts" @@ -9,4 +9,4 @@ main: # - title: "Sample Collections" # url: /collection-archive/ # - title: "Sitemap" - # url: /sitemap/ \ No newline at end of file + # url: /sitemap/ diff --git a/_pages/category-archive.md b/_pages/category-archive.md new file mode 100644 index 000000000000..0debf30bc289 --- /dev/null +++ b/_pages/category-archive.md @@ -0,0 +1,7 @@ +--- +title: "Category" +layout: categories +permalink: /categories/ +author_profile: true +sidebar_main: true +--- diff --git a/_posts/2024-11-22-241122_001.md b/_posts/2024-11-22-241122_001.md new file mode 100644 index 000000000000..9d4715caecf1 --- /dev/null +++ b/_posts/2024-11-22-241122_001.md @@ -0,0 +1,46 @@ +--- +layout: single +title: "1주차 멘토링 : OT" +categories: coding +--- + +# 1주차 멘토링 : OT + +### 백엔드 개발자의 무기 = 스프링 + +### A. 멘토링 방식 + +1.스프링 기반으로 개념 질문 + +1) 키워드를 기반으로 멘토링 시간에 질문 + +2) 라이브 코딩 + +3) 자소서 쓰는 방법에 대한 멘토링 진행 + +(1) 스토리 및 키워드를 뽑아서 이야기가 진행되도록 작성 + +4) 회사업무 기반으로 포트폴리오 작성 + +(1) 키워드 같은 것만 이라도 뽑아올 것 + +(2) 자바스프링으로 프로젝트 진행 후 포트폴리오에 추가 + +### B. 과제 + +1. 공부한 내용을 정리할 블로그 생성 + +2. 공부계획을 세우기 + +1) 스케줄 작성 후 멘토님께 전달 + +(1) 추이를 볼 것이므로 100% 현실적인 스케줄을 작성할 것 +![alt](../assets/images/1000026803.jpg) + +3. 블로그에 스프링 개념 정리 + +1) 키워드 정리 필요 + +2) 공부한 내용 멘토님께 전달 + +- 12주동안 연속적으로 기간안에 진행 후 끝내야 하는 것은 아님 \ No newline at end of file diff --git a/_posts/2024-11-24-241124_001.md b/_posts/2024-11-24-241124_001.md new file mode 100644 index 000000000000..ef8aefa99488 --- /dev/null +++ b/_posts/2024-11-24-241124_001.md @@ -0,0 +1,109 @@ +--- +layout: single +title: "chapter 01. 강의 및 스프링 소개" +categories: coding +--- + +**1. 자바와 스프링의 차이** + +1) 자바 : 내가 직접 모든 객체와 동작을 수행 시킴 + +2) 스프링 : 스프링의 규칙과 동작을 이해해서 따라야 함 + +(1) 메소드 호출이 비교적 자유로움 + +(2) 동작을 알아서 해주는 것을 스프링이라 할 수 있음 + +(3) 스프링의 동작을 이해하고, 규칙을 활용해야 불필요한 코드가 사라짐 + +(4) 예상하는 동작을 실행시킬 수 있음 + +> 스프링의 규칙과 동작을 잘 이해하고 그 안에서 어떤 부분을 코딩해야 하는가 왜 그렇게 동작하는가를 이해하고 코딩해야 생산성이 좋은 개발을 할 수 있게 된다. + +**2. OOP와 스프링 프레임워크** + +> 객체지향 프로그래밍을 왜 하는가? + +> 객체지향과 스프링 프레임워크와의 관계 + +1) OOP + +> 어떻게 설계를 하고, 원하는 기능이 어디에 있는지 빨리 파악하고, 필요한 부분만 수정할 수 있는 가에 대한 방법론을 제시하는 것 + +2) 스프링 프레임워크 + +(1) 기능을 추가하거나 기존 기능을 수정할 때 어떤 부분을 건드려야 하는지 어려울 수 있음 + +(2) 편리하게 코딩할 수 있도록 하는 것 + +(3) 핵심 기능 외의 기능이 너무 많다. + +**3. 검색 및 지식 탐색** + +1) Google + +2) Stackoverflow + +3) Baeldung + +4) Medium + +**4. 자바의 봄, 스프링** + +1) 동적인 웹사이트를 만들기 위한 다양한 도전들 + +(1) CGI(Common Gateway Interface) + +- 사용자의 요청에 따라 서버에서 실행되는 프로그램을 통해 동적인 웹 페이지를 생성하거나 데이터를 처리하는 데 사용 + +(2) Servlet + +- 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 + +2) EJB(Enterprise Java Beans) + +(1) 당시 EJB가 내세우던 내용 + +- 데이터 저장 수정 시 안정적, 트랜잭션 처리 Good + +- 믿을 수 있는 EJB + +(2) 단점 + +- 매우 침투적인 코딩 (EJB전용의 코드) + +- 테스트가 어렵거나 불가능 + +- 수행 속도가 너무 너무 느림 + +3) 스프링 + +- 어려운 ejb 말고 샘플코드(스프링)이 서적으로 집필됨 + +- 그 스프링을 기반으로 프레임워크를 개발하기 시작 + +(1) 지금의 스프링 + +- 20년의 역사 + +(2) 스프링 버전 + +- 스프링3: java5, @Configuration + +- 스프링4: java8, Websocket 등 지원 + +- 스프링5: Reactive Programming 지원 + +- 스프링6 출시 예정 + +**5. 스프링을 어떻게 배워야 할까?** + +1) 코드로 라이브러리를 호출하는 구조를 살핀다. + +2) 프레임워크가 내 코드를 호출하는 구조를 살핀다. + +3) 스프링 프레임워크가 나의 코드를 어떻게 사용하는지 살핀다. + +> 전체적인 플로우, 구조, 그림을 알아본다 + +> 세부적인 것들은 나중에 이슈발생 시(필요할 때) 찾아본다. \ No newline at end of file diff --git a/_posts/2024-11-25-241125_001.md b/_posts/2024-11-25-241125_001.md new file mode 100644 index 000000000000..012cf53c0337 --- /dev/null +++ b/_posts/2024-11-25-241125_001.md @@ -0,0 +1,203 @@ +--- +layout: single +title: "chapter 02. OOP와 스프링 프레임워크" +categories: coding +--- + +### A. 객체지향 프로그래밍(OOP)을 왜 하는가? + +1. 소프트웨어(VS 하드웨어) + +1) 소프트웨어는 계속 바꾸고 수정할 수 있음 + +- 예)카카오톡 + +> 처음에는 단순 메시지 대신으로 쓰임 + +> 현재는 결제, 쇼핑하기, 게임 등등 다양한 기능들을 제공 + +### B. 객체지향이란 무엇인가? + +**1. 분류: 코드를 적절히 잘 분류할 수 있어야 한다.** + +예) 도서관에서 원하는 책을 빨리 찾는 방법 + +- 분류를 잘 하면 찾기 쉽다. + +1) Class의 역할 + +(1) 프로그램의 코드를 체계적으로 분류 + +(2) 같은 역할을 하는 코드를 응집성 있게 모아줌 + +2) 객체지향 프로그래밍(OOP) + +(1) 소프트웨어의 복잡성을 해결하고 관리할 수 있는 방법( 가장 대중적이고 좋다고 알려진 방법) + +(2) 데이터(상태, 필드)와 로직(행위, 메소드)이 응집되어 상호 교류하며, 동작하도록 만드는 프로그래밍 기법 + +**2. 교체: 경우에 따라 특정 모듈을 통째로 변경해야 할 수도 있다.** + +예) - 시스템의 변경 + +- Oracle DB → Mysql DB + +- RDB → NoSQL + +- 문자 발송 외부 업체 변경 + +1) OOP설계 시 고려할 점 + +(1) 소프트웨어를 말랑말랑하게(수정이 쉽게) 유지하기 위한 것은 쉽지 않다 + +(2) 좋지 않은 설계 예시 + +- 스파게티 면이 꼬여있듯이 기능 추가될때 마다 줄줄이 엮어서 코딩 + +- if else문의 반복 코딩 + +2) 변경이 어려운 이유들 + +(1) 너무 복잡하게 기능이 섞여 있어서 어디를 어떻게 고쳐야 할지 파악이 어렵다. + +(2) 기능 추가 후 기존에 잘 돌던 기능들이 갑자기 동작하지 않는다. + +(3) 내가 고친 곳과 상관 없는 전혀 엉뚱한 곳이 갑자기 잘못 동작한다. + +### C. OOP를 잘하는 방법 SOLID + +1. 분류 : 구글과 같이 20억 라인의 긴 코드는 어떻게 관리해야 할까? + +2. 교체 : 갑자기 내가 쓰던 라이브러리가 없어진다면? + +3. SOLID 원칙 + +1) SRP : 단일 책인 원칙(분류) + +(1) 한 클래스는 단일의 책임만 가져야 한다 + +2) OCP : 개방 폐쇄 원칙(교체) + +(1) 확장에는 열려있고, 변경에는 닫혀있다. + +3) LSP : 리스코프 치환 원칙(교체) + +(1) 서브타입은 언제나 기본타입으로 교체할수 있어야 한다. + +(2) 상속 받은 클래스는 부모 클래스와 동일한 동작을 해야 재활용 가능성이 높아진다. + +(부모타입을 인터페이스처럼 생각할 것) + +(3) 실무에선 의외로 상속을 많이 사용하지 않는다. + +- 상속 시 오버라이드를 한 것과 아닌 것의 혼란 + +- 상속 오버라이드를 잘못하면 로직 충돌 + +- 기능을 너무 확장하거나 변경하면 재활용성이 낮아짐 + +(4) 상속의 대안 또는 상속을 잘하는 방법 + +- 상속을 위한 설계를 한 클래스만 상속하라 + +- 부모 클래스 상속 대신 인터페이스를 활용하라 + +- 피할 수 없다면 상속을 하지만 부모와 상호 치환이 가능하도록 하라 + +→ 부모 클래스와 동일한 기능 제공 + +4) ISP : 인터페이스 분리 원칙(분류) + +(1) 인터페이스도 단일 책임을 갖도록 분리해야 한다. + +(2) SRP와 다소 유사하지만 인터페이스도 단일의 책임을 갖도록 설계해야 필요한 기능만 구현하고 제공할 수 있다. + +(3) 너무 큰 인터페이스를 만들면 빈 메서드를 만드는 경우가 발생 + +5) DIP : 의존성 역전 원칙 + +(1) 하위 모듈의 변경이 상위 모듈의 변경을 요구하는 의존성을 끊어내야 한다. + +→ 개발을 하다 보면 내가 사용하던 라이브러리를 다른 라이브러리로 변경하면 코드를 다 뜯어 고쳐야 하는 경우가 있는데 그렇게 라이브러리에 직접적으로 의존하면 교체가 어렵다. + +→ 라이브러리를 너무 의존하지 않도록 하자. + +→ 의존성을 역전시키도록 개발(하위 모듈이 상위 모듈에 의존하도록 설계) + +4. SOLID Wrap-up + +1) SOLID + +(1) SRP(분류) : 컨플릭(충돌)을 방지, 역할에 해당하는 서비스를 잘 찾는다. + +(2) OCP(교체) : if else 에서 반복적인 케이스가 보이면, 클래스 분리를 고려 + +(3) LSP(교체) : 상속보다는 IF를 고려하고, 상속을 해도 비슷하게 만들어야 교체가 쉽다. + +(4) ISP(분류) : 인터페이스도 OCP를 따라야 구현이 편리하고 재활용성이 올라간다. + +(5) DIP(교체) : 하위 모듈에 너무 의존하면 변경이 어려움, 중간 IF를 둬야 하위 모듈 변경이 쉽다. + +2) 새로운 어플리케이션에서는 SOLID 원칙을 다 지키기 어렵고 한다고해도 코드만 복잡해 질 수 있다. + +3) KISS (Keep It Simple Stupid) + +(1) 코딩을 심플하게 해라. + +(2) 기획내용을 잘 검토하여, 개발할 때 개발내용이 복잡한 경우, 개발자가 기획자에게 역제안을 하여 복잡도를 낮춘다. + +4) YAGNI (You Ain’t Gonna Need It) + +(1) 애매한건 지운다(쓰지 않거나, 활용도가 낮은 메서드나, 클래스를 과감하게 지운다) + +→ 분석하는 데 필요한 리소스자원을 잡아먹을 수 있음 + +5) 처음부터 억지로 적용하려고 하지말고, 시스템이 성장하면서 복잡해질때 SOLID를 한번 떠올려본다. + +### D. SOLID를 잘하는 방법 스프링 + +1. 분류(SRP,ISP) + +1) Three-Layer 아키텍쳐 in Spring MVC + +> 스프링 Web MVC에서 가장 대중적으로 활용되는 역할 분리 방법 + +a. 표준적인 레이어 별 역할을 나눠주기 때문에 SRP를 도와줌 + +→ 클래스의 역할이 조금 더 명확해짐 + +→ 코드의 파악이 더 쉬워짐 + +* OSI 7 계층과 유사 + +(1) Presentation layer[표현 레이어] = Controller Classes + +(2) Business Logic layer[비즈니스로직 레이어] : Service Classes + +(3) Data Access layer[데이터 접근 레이어] : Repository Classes + +2. 교체(OCP,LSP,DIP) + +1) DI Container - Dependency Injection Container + +(1) 개체들을 담아주는 큰 저장소 + +(2) 의존성 주입 컨테이너(상자) + +(3) 스프링의 핵심 + +2) DI Config + +(1) OCP, LSP, DIP의 손쉬운 교체 + +(2) 코드 상에서는 의존성 없이 DI Config만으로 의존 클래스 변경 + +3) 꼭 스프링을 써야하는가? + +(1) 교체가 자유롭고 단일 책임을 잘 지키도록 분류를 잘해서 짜려면 이렇게 샘플처럼 짜보면 됩니다 = 스프링 + +(2) SOLID를 지키려고 짜다보면 결국 스프링과 비슷한 기능을 만들게 된다. + +→ 굳이 반복적으로 SOLID에 맞게 만들 필요 없이 잘 만들어진 스프링을 쓰면 된다. + +→ 하지만 한번쯤 SOLID에 맞게 직접 코드를 짜보면 스프링을 이해하는데 큰 도움이 된다. \ No newline at end of file diff --git a/_posts/2024-11-26-241126_001.md b/_posts/2024-11-26-241126_001.md new file mode 100644 index 000000000000..4ab260c34d82 --- /dev/null +++ b/_posts/2024-11-26-241126_001.md @@ -0,0 +1,113 @@ +--- +layout: single +title: "chapter 03. 자바에서 스프링으로 #1 프로젝트 소개 및 생성" +categories: coding +--- + +01_순수 자바로 이루어진 프로젝트 + +#1 프로젝트 소개 및 생성 + +- 앞에서 말했던 실습을 해볼 시간 + +실습 순서 + +1. 순수 자바로 된 프로젝트를 만들어본다. + +2. 내가 직접 심플 스프링을 만들어본다,. + +3. 스프링을 활용해서 내가 만든 프로젝트를 동작하게 한다. + +프로젝트 설명 + +- 편의점 결제 서비스 + - Mac 또는 Windows + - IDE: IntelliJ Ultimate 추천(Comumunity 버전 또는 Eclipse도 가능 +- Language : Java(jdk 17) +- Project : Gradle Project +- Spring Boot : 2.6.4 +- 프로젝트 생성 : start.spring.io +- Group : com.zerobase +- Artifact : heart + +생성된 build.gradle 파일 내용 + +```kotlin +plugins { + java + id("org.springframework.boot") version "3.3.6" + id("io.spring.dependency-management") version "1.1.6" +} + +group = "com.zerobase" +version = "0.0.1-SNAPSHOT" + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter") + testImplementation("org.springframework.boot:spring-boot-starter-test") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") +} + +tasks.withType { + useJUnitPlatform() +} + +``` + +### 실습을 위한 스프링 부트 세팅 +1\. spring initializr
+   1\) 스프링부트 앱을 쉽게 만들어주는 웹 + +   2\) URL : https://start.spring.io/ +![image](../assets/images/20241126_first/2024-11-26-001.png) + + +### Project +![image](../assets/images/20241126_first/2024-11-26-002.png) +\> Gradle(Groovy)선택 + +### Language +![image](../assets/images/20241126_first/2024-11-26-003.png) +\> Java 선택 + +### Spring Boot +![image](../assets/images/20241126_first/2024-11-26-004.png) +\> SNAPSHOT 버전 외 선택 (SNAPSHOT 버전은 안정화가 덜 되었을 확률이 있음) +
+### Project Metadata +![image](../assets/images/20241126_first/2024-11-26-005.png)
+\> 프로젝트 명 밑 패키지 구성
+\> Jar 선택
+\> JAVA 17 추천
+![image](../assets/images/20241126_first/2024-11-26-006.png)
+\> GENERATE 클릭 시 위의 설정대로 프로젝트 생성됨
+
+![image](../assets/images/20241126_first/2024-11-26-007.png)
+
+\> 다운 받은 프로젝트를 압축 해제
+![image](../assets/images/20241126_first/2024-11-26-008.png)
+![image](../assets/images/20241126_first/2024-11-26-009.png)
+
+\> IDE실행하여 프로젝트 열기 수행
+![image](../assets/images/20241126_first/2024-11-26-010.png)
+
+\> build.gradle 내에 플러그인 및 그룹, 자바 버전 확인
+![image](../assets/images/20241126_first/2024-11-26-011.png)
+
+\> 상단의 실행 버튼 클릭하여 빌드
+![image](../assets/images/20241126_first/2024-11-26-012.png)
+
+\> ConvpayApplication 실행 가능
+![image](../assets/images/20241126_first/2024-11-26-013.png)
+\> 정상적으로 어플리케이션이 실행이 되었다면, 위와같이 완료되면
+\> 기본적인 스프링 부트 세팅이 완료되었다고 볼 수 있음
\ No newline at end of file diff --git a/_posts/2024-12-01-241201_001.md b/_posts/2024-12-01-241201_001.md new file mode 100644 index 000000000000..79c3cf710aca --- /dev/null +++ b/_posts/2024-12-01-241201_001.md @@ -0,0 +1,8 @@ +--- +layout: single +title: "Git이란?" +categories: coding +--- + +# test +tetss diff --git a/_posts/image.png b/_posts/image.png new file mode 100644 index 000000000000..5a75b1d86a41 Binary files /dev/null and b/_posts/image.png differ diff --git a/assets/images/1000026803.jpg b/assets/images/1000026803.jpg new file mode 100644 index 000000000000..cda2a34d767f Binary files /dev/null and b/assets/images/1000026803.jpg differ diff --git a/assets/images/1000027023.webp b/assets/images/1000027023.webp new file mode 100644 index 000000000000..c406d215486b Binary files /dev/null and b/assets/images/1000027023.webp differ diff --git a/assets/images/20241126_first/2024-11-26-001.png b/assets/images/20241126_first/2024-11-26-001.png new file mode 100644 index 000000000000..3a22929b878c Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-001.png differ diff --git a/assets/images/20241126_first/2024-11-26-002.png b/assets/images/20241126_first/2024-11-26-002.png new file mode 100644 index 000000000000..4bd069aae121 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-002.png differ diff --git a/assets/images/20241126_first/2024-11-26-003.png b/assets/images/20241126_first/2024-11-26-003.png new file mode 100644 index 000000000000..4adb66c604e6 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-003.png differ diff --git a/assets/images/20241126_first/2024-11-26-004.png b/assets/images/20241126_first/2024-11-26-004.png new file mode 100644 index 000000000000..9041dfa45342 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-004.png differ diff --git a/assets/images/20241126_first/2024-11-26-005.png b/assets/images/20241126_first/2024-11-26-005.png new file mode 100644 index 000000000000..739879d95890 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-005.png differ diff --git a/assets/images/20241126_first/2024-11-26-006.png b/assets/images/20241126_first/2024-11-26-006.png new file mode 100644 index 000000000000..2bb1115a5616 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-006.png differ diff --git a/assets/images/20241126_first/2024-11-26-007.png b/assets/images/20241126_first/2024-11-26-007.png new file mode 100644 index 000000000000..818de9416daf Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-007.png differ diff --git a/assets/images/20241126_first/2024-11-26-008.png b/assets/images/20241126_first/2024-11-26-008.png new file mode 100644 index 000000000000..87200650c90e Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-008.png differ diff --git a/assets/images/20241126_first/2024-11-26-009.png b/assets/images/20241126_first/2024-11-26-009.png new file mode 100644 index 000000000000..9eeb9c265b3a Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-009.png differ diff --git a/assets/images/20241126_first/2024-11-26-010.png b/assets/images/20241126_first/2024-11-26-010.png new file mode 100644 index 000000000000..61d63e8620fb Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-010.png differ diff --git a/assets/images/20241126_first/2024-11-26-011.png b/assets/images/20241126_first/2024-11-26-011.png new file mode 100644 index 000000000000..8ddd5fb7cccf Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-011.png differ diff --git a/assets/images/20241126_first/2024-11-26-012.png b/assets/images/20241126_first/2024-11-26-012.png new file mode 100644 index 000000000000..c6d0e3a1d37f Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-012.png differ diff --git a/assets/images/20241126_first/2024-11-26-013.png b/assets/images/20241126_first/2024-11-26-013.png new file mode 100644 index 000000000000..32ded21cef67 Binary files /dev/null and b/assets/images/20241126_first/2024-11-26-013.png differ diff --git a/assets/images/photo-1607706189992-eae578626c86.jfif b/assets/images/photo-1607706189992-eae578626c86.jfif new file mode 100644 index 000000000000..367bc7b96b92 Binary files /dev/null and b/assets/images/photo-1607706189992-eae578626c86.jfif differ