From 04da740c07967b2bd83e7317371e54ec80422f53 Mon Sep 17 00:00:00 2001 From: KSG44 Date: Sun, 29 Mar 2026 16:15:19 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs:=200=EC=A3=BC=EC=B0=A8=20=EA=B3=BC?= =?UTF-8?q?=EC=A0=9C=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0]\352\271\200\354\212\271\352\263\244.md" | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 "week0/[0\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" diff --git "a/week0/[0\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" "b/week0/[0\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" new file mode 100644 index 0000000..8c1aad7 --- /dev/null +++ "b/week0/[0\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" @@ -0,0 +1,81 @@ +[WEEK 0] 온보딩 (기간 : 9/16 ~ 9/22) + +## COW SPRING 6기 PRE-ONBOARDING 학습 과제 + +본격적으로 Spring 학습에 들어가기 전에 여러분은 객체지향 코드에 대해 학습하고 이해하는 시간을 가지실겁니다! + +객체지향 코드를 짜기 위해서는 우리가 사용할 언어인 JAVA에 대해 이해하고 있어야합니다. + +이 온보딩 과제는 이번 COW Server 파트에 함께 하시는 7분의 개개인의 역량이 다르기 때문에 가장 최소한으로 알고 계셔야 할 내용을 중심으로 선정해봤어요! + +많은 양의 정리를 요구하지 않는 과제이니 이해하신 내용을 토대로 간단하게 정리해주시면 됩니다. (1, 2, 3, 4기의 학습자료가 github에 나와있으니 참고하셔도 좋아요☺️) + +개인적으로, 분명 학습했던걸 다 기억하실 수 없으실거예요! 저도 마찬가지이고요.. 공부했던 것을 잘 정리해두는 습관을 가지는 것은 분명 큰 도움으로 돌아올 것이라 생각합니다. 그런 의미로 다들 파이팅해봐요! + +--- + +# 필수 +## www.google.com을 치면 일어나는일 +Keywords : DNS, TCP/IP프로토콜, WS, WAS. + +1. 로컬 캐시를 확인해 접속한 기록이 있는지 확인한다. +2. 접속한 기록이 없으면 DNS(Domain Name System)서버에 IP주소를 요청한다. +3. 해당 IP주소로 TCP/IP 프로토콜을 이용해 웹 서버에 접속한다. 이때 3-way-handshakes 방식을 통해 연결이 이루어진다. +4. 웹 서버에 HTTP 요청을 보낸다.(홈페이지 요청 - HTML, CSS, JS, 이미지 등) +5. 웹 서버는 요청을 처리한 후 HTTP 응답을 반환한다. +6. 웹 브라우저는 HTTP 응답을 받아서 웹 페이지를 렌더링한다. +--- + +## API, HTTP통신 +### API(Application Programming Interface) +API는 Application이 데이터를 교환, 작업을 수행, 문서화 된 방식으로 상호 작용할 수 있도록 지원하는 규칙과 프로토콜의 집합이다.\ +프로토콜은 서로 간에 데이터를 주고 받으려면 데이터가 이런 모양이여야 하고, 그 안에 ip, port가 있어야 한다 등 일정 형태의 약속이다. + +### HTTP 통신 (HyperText Transfer Protocol) +HTTP는 웹 브라우저와 서버가 데이터를 주고받기 위한 프로토콜로, TCP/IP 기반의 요청 및 응답 구조를 가진다. +1. 요청/응답 구조 : 클라이언트가 서버에 요청을 보내면, 서버는 해당 요청을 처리한 후 응답을 반환한다. +2. 무상태성 : HTTP는 각 요청이 독립적으로 처리되며, 이전 요청의 상태를 유지하지 않는다. +3. 비연결성 : HTTP는 요청이 완료된 후 연결을 종료한다. 이후 새로운 요청이 발생하면 새로운 연결이 생성된다. + +### API와 HTTP 한줄평 +API는 프로그램들이 서로 소통하는 규칙. (어떻게 데이터를 주고받을 것인가?)\ +HTTP는 웹에서 데이터를 주고받기 위해 사용하는 표준 통신 규약. +--- + +## 백엔드가 하는 일 +1. 서버 개발 : 앱을 만들고 유지보수하는데 필요한 컴퓨터 시스템을 선택하고 설정하며, 이를 관리한다. +2. 데이터베이스 관리 : 앱에서 사용하는 데이터베이스를 설계, 구축, 유지보수한다. +3. API 개발 : 앱과 다른 시스템 간의 통신을 위한 API를 개발한다 +4. 보안 관리 : 앱과 서버의 보안을 유지하기 위해 필요한 조치를 취한다. +--- + +## 객체지향 특징 및 장점 +### 객체지향의 4가지 특징 +1. 캡슐화(Encapsulation) : 데이터와 메서드를 클래스로 묶고, 외부 접근을 제한한다. +2. 상속(Inheritance) : 기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스에서 확장한다. +3. 다형성(Polymorphism) : 동일한 메서드나 클래스가 다양한 형태로 동작할 수 있다. +4. 추상화(Abstraction) : 시스템의 속성과 핵심 메서드를 추출하여 단순화한다. +### 객체지향의 장점 +1. 재사용성 : 이미 만들어진 클래스를 상속받아 재사용하여 새로운 클래스를 만들 수 있다. +2. 유지보수성 : 객체 단위로 코드를 작성하기에, 코드 수정이 필요할 때 해당 객체만 수정하면 되기에 유지보수 비용이 낮다. +3. 확장성 : 새로운 기능을 추가할 때 기존 코드를 변경하지 않고도 새로운 클래스를 만들어 확장할 수 있다. +4. 유연성 : 객체지향은 시스템의 유연성을 높여, 변화하는 요구사항에 대응하기 쉽다. +5. 안정성 : 캡슐화를 통해 외부에서 내부의 데이터와 메서드에 직접 접근하지 못하여 데이터 보호와 안정성이 좋다. +--- + +## 코드 컨벤션이란 +코드 컨벤션이란 읽고, 관리하기 쉬운 코드를 작성하기 위한 일련의 규칙이다.\ +코드 컨벤션을 통해 코드의 가독성이 좋아지고, 잠재적 위험 요소를 줄이며, 협업 과정에서 유지보수 비용을 줄이는 데 도움이 된다. +### 이름 규칙 - Java의 경우 +1. PascalCase : 첫글자와 이어지는 단어의 첫글자를 대문자로 작성하는 방식이다. Java에서는 클래스 이름과 Exception 클래스 이름에 사용된다. ex) MyJava, MyPython +2. camelCase : 첫단어는 소문자로 표기하고 이어지는 단어의 첫글자는 대문자로 작성하는 방식이다. Java에서는 변수 이름과 메서드 이름에 사용된다. ex) myJava, myPython +3. UPPER_CASE : 모든 글자를 대문자로 작성하는 방식이다. Java에서는 상수 이름에 사용된다. ex) MY_JAVA, MY_PYTHON +--- + +## MVC 패턴 +MVC란 Model, View, Controller의 약자로 하나의 애플리케이션을 세 가지의 역할로 구분한 패턴이다.\ +사용자는 View만 볼 수 있다. 예를 들면 웹페이지와 상호작용하는 것이다. 사용자가 View에서 어떤 행동을 하면 Controller로 전달된다. Controller는 사용자의 요청을 받아 Model에게 데이터를 요청한다. 데이터를 받은 Controller는 그 데이터를 View로 전달해 View가 사용자에게 데이터를 보여준다.\ +Model은 오직 데이터와 로직만 담당하고, View는 오직 사용자에게 보이는 화면을 그리는 것만 담당한다. Controller는 이 둘 사이에서 통제자 역할을 한다.\ +이렇게 세 가지 역할로 분리하면 후에 각각 수정할 때 서로 영향을 주지 않아 유연성이 좋아지고 유지보수가 편해진다. + +--- \ No newline at end of file From 57d3f355eef89663437df6a682fca70f5c5bb62e Mon Sep 17 00:00:00 2001 From: KSG44 Date: Sun, 29 Mar 2026 16:15:19 +0900 Subject: [PATCH 2/3] docs: readme --- ...\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "week1/[1\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" diff --git "a/week1/[1\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" "b/week1/[1\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" new file mode 100644 index 0000000..f9869b2 --- /dev/null +++ "b/week1/[1\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" @@ -0,0 +1 @@ +안녕하세요 김승곤입니다 잘 부탁드립니다!! \ No newline at end of file From 72b528cf0dff9f6964350135e82b163e82372013 Mon Sep 17 00:00:00 2001 From: KSG44 Date: Sun, 29 Mar 2026 16:15:20 +0900 Subject: [PATCH 3/3] =?UTF-8?q?docs:=202=EC=A3=BC=EC=B0=A8=20=ED=95=99?= =?UTF-8?q?=EC=8A=B5=20=EA=B3=BC=EC=A0=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week2/README.md | 0 ...0]\352\271\200\354\212\271\352\263\244.md" | 49 +++++++++++++++++++ 2 files changed, 49 insertions(+) delete mode 100644 week2/README.md create mode 100644 "week2/[2\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" diff --git a/week2/README.md b/week2/README.md deleted file mode 100644 index e69de29..0000000 diff --git "a/week2/[2\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" "b/week2/[2\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" new file mode 100644 index 0000000..b8e69aa --- /dev/null +++ "b/week2/[2\354\243\274\354\260\250]\352\271\200\354\212\271\352\263\244.md" @@ -0,0 +1,49 @@ +# 코드연습 - 로또 + +## 고민했던 점 +과제를 처음 볼 때 어떻게 해야할지 모르겠어서 막막했다. 우선 과제 설명을 꼼꼼히 읽어보고, 내가 모르는 것들을 체크했다.\ +우선 테스트라는 것이 뭐고 어떻게 하는 건지, 3항 연산자, JUnit 5와 AssertJ, Java Enum에 대해 알아봤다.\ +다음은 조건으로 유의할 점을 생각했다. Java 11 환경설정과 Randoms, Console API 사용 +과제 설명에서 들었듯이 코드를 작성하기 전에 우선 어떤 기능을 만들건지, 어떻게 설계할건지를 먼저 고민했다. 먼저 로또 프로그램이 +과제 설명대로 콘솔에 출력되기 위해서 어떤 기능이 필요한지 생각해봤다. 기능을 생각하는 것은 어렵지 않았다. 왜냐하면 실행 결과 예시를 보고 어떤 기능이 필요할지 바로 알 수 있었기 때문이다. +하지만 그 기능들의 대한 예외상황에 대해 고민했고 어떻게 코드로 구현해야할지 어려웠다.\ +다음은 코드를 작성하기 전에 MVC 패턴을 적용하기 위해서 우선 domain, controller, view 패키지를 만들고 그 안에 클래스를 만들었다.\ +과제대로 기능을 하나 만들고 그에 대한 테스트를 만들고 검증하여 커밋하는 방식으로 진행했다. 이게 커밋하면서 잘못 커밋하거나 다른거까지 커밋하는 경우가 있어서 되돌리는 방법 찾으면서 깃에 대해서 좀 찾아보게 되었다. +그리고 나중에서야 알게된건데 깃허브 계정과 깃 계정이 달라서 커밋해도 커밋한 계정이 다르게 나타났었다. 그래서 그것도 좀 찾아보느라 시간이 걸렸다.\ +Enum 활용에 대해서도 찾아보다가 당첨 순위에 많이 써서 나도 그것만 쓰면 되겠다 했는데 기능에 대한 에러메시지가 겹치는 게 많아서 이것도 중간에 Enum으로 만들어 수정했다. +그리고 Enum은 어디 패키지에 넣어야하나 생각하다 결국 enums 패키지를 하나 만들어서 그 안에 넣었다. +또 코드 컨벤션을 최대한 지킬려고 했지만 코드 컨벤션이 익숙하지 않아서 그런지 네이밍 컨벤션을 지키지 못한 경우가 종종 있어 커밋할 때마다 코드 컨벤션을 다시 찾아보면서 고쳐서 커밋했다.\ +그리고 코드를 작성하는 데 있어서 많은 시간이 걸렸다. 코드를 직접 생각하는 것을 먼저해봤는데 인공지능을 활용하는 것을 더 많이 해와서 도저히 생각이 안났다. 어떤 기능이 필요한지는 알지만 그걸 구현하기 위한 코드를 작성하는 것이 너무 어려웠다. +그래서 내 코드랑 인공지능 코드를 비교하는 것보다 인터넷을 찾아보면서 다른 사람들은 이렇게하고 인공지능은 이렇게 하는구나 하면서 찾아보았다. 하지만 과제를 완료한 지금도 코드를 작성하는 것이 여전히 어렵다고 생각한다. 코드를 많이 작성해보면서 여러 기능들이나 감을 갖는 것을 목표로 노력해야겠다. + +## 학습한 내용 + +### Randoms, Console API +우아한테크코스 미션에서 제공하는 라이브러리의 도구들이다 +- Randoms.pickUniqueNumbersInRange(min, max, count) : 범위 내에서 중복되지 않는 숫자들을 정해진 개수만큼 뽑아준다. +- Console.readLine() : 사용자의 입력을 받는다. 내부적으로 Scanner를 사용한다. 다만 자동으로 프로그램 종료 시점에 Scanner를 닫아준다. + +### Enum +서로 연관된 상수들의 집합을 정의하는 특별한 클래스이다.\ +상수들을 묶어서 관리함으로써 가독성이 좋고 어디서든 가져다 쓸 수 있기 좋다. + +### JUnit 5와 AssertJ +자바 개발자의 테스트 작성을 돕는 라이브러리이다.\ +JUnit 5는 테스트 프레임워크로, 테스트 케이스를 작성하고 실행 할 수 있게 해준다.\ +AssertJ는 가독성을 향상시켜주는 라이브러리이다.\ +테스트 결과를 검증하는 데 사용되는 다양한 assertion 메서드를 제공한다. 이 때 메서드들이 영어 문장처럼 읽히는 API여서 가독성이 좋은 것이다.\ + +### MVC 패턴 +1. Model : 데이터와 로직을 담당하는 부분 +2. View : 사용자에게 보여지는 화면을 담당하는 부분 +3. Controller : Model과 View 사이에서 통제자 역할을 하는 부분 +\ +내가 이해한 대로 설명을 하자면, 사용자는 View를 통해서만 프로그램을 조작할 수 있다. 예를 들면 view에서 입력값이 주어지면 +view는 그 값을 controller로 전달하고 그에 대한 처리를 controller가 model에게 요청한다. 다시 그 결과값을 controller가 view에게 전달하는 것이다.\ +\ +많은 사람들이 model이라고 안하고 domain해서 나도 그렇게 쓰고있다. +이번 과제에서는 domain 패키지에는 로또 번호, 당첨 번호, 당첨 순위 등 데이터와 기능을 담당하는 클래스들을 포함되고 view 패키지에는 사용자에게 보여지는 화면과 입력을 담당하는 클래스들이 포함되고, controller 패키지에는 사용자의 입력을 받아 모델에 해당하는 클래스들을 호출하는 클래스들을 포함한다 + +### 검증 +전에는 그저 코드 작성만 하고 완성했다고 생각했는데. 꼭 테스트하는 과정이 있어야 한다는 것을 느꼈다.\ +테스트를 만들면서 테스트를 통과하기 위한 조건을 생각하면서 기능에 대해 명확하게 알 수 있었다. 또 기능을 명확하게 나눌 수 있으니 코드를 작성할때도 클래스를 나누는 데 있어서 더욱 쉬웠다.