TIL
-
[3 Layer Architecture] 메모장 프로젝트의 문제점현재 메모장 프로젝트는 Controller 클래스 하나로 모든 API를 처리하고 있음현재는 API 수가 적고 기능이 단순하여 코드가 복잡해 보이지 않을 수 있지만 앞으로 기능이 추가되고 복잡해진다면 문제 발생 가능한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해 어려움현업에서는 코드의 추가 혹은 변경 요청이 계속 생길 수 있음이러한 문제점들을 해결하기 위해 서버 개발자들은 서버에서의 처리과정이 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 Controller, Service, Repository 3개로 분리하였음! Spring의 3 Layer Architecture 1. Controller클라이언트의 요청을 받음요..
[TIL] 230517 <Spring> 3 Layer Architecture, IoC와 DI, JPA CORE[3 Layer Architecture] 메모장 프로젝트의 문제점현재 메모장 프로젝트는 Controller 클래스 하나로 모든 API를 처리하고 있음현재는 API 수가 적고 기능이 단순하여 코드가 복잡해 보이지 않을 수 있지만 앞으로 기능이 추가되고 복잡해진다면 문제 발생 가능한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해 어려움현업에서는 코드의 추가 혹은 변경 요청이 계속 생길 수 있음이러한 문제점들을 해결하기 위해 서버 개발자들은 서버에서의 처리과정이 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 Controller, Service, Repository 3개로 분리하였음! Spring의 3 Layer Architecture 1. Controller클라이언트의 요청을 받음요..
2024.05.17 -
[메모장 프로젝트 설계] 프로젝트 생성 및 준비images 폴더 생성 후 그 안에 delete,done,edit,send.png 넣기 (src > main > resources > static)index.html (src > main > resources > static)더보기 Memo 공유하고 싶은 소식을 입력해주세요. rows="10"> 작성하기--> October 10, 2020 anonymous ..
[TIL] 230516 <Spring> 메모장, Database와 SQL[메모장 프로젝트 설계] 프로젝트 생성 및 준비images 폴더 생성 후 그 안에 delete,done,edit,send.png 넣기 (src > main > resources > static)index.html (src > main > resources > static)더보기 Memo 공유하고 싶은 소식을 입력해주세요. rows="10"> 작성하기--> October 10, 2020 anonymous ..
2024.05.16 -
[Spring MVC] MVC 디자인 패턴MVC : Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나MVC 패턴 : 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리ㄴ 코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 함ㄴ 따라서 소프트웨어를 개발할 때, MVC 패턴을 적용하여 구조를 잘 설계하는 것이 중요Model데이터와 비즈니스 로직을 담당데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행View사용자 인터페이스를 담당사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현ControllerModel과 View 사이의 상호작용을 조정하고 제어사용자의 입력을 받아 Model에 전..
[TIL] 230514 <Spring> Spring MVC[Spring MVC] MVC 디자인 패턴MVC : Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나MVC 패턴 : 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리ㄴ 코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 함ㄴ 따라서 소프트웨어를 개발할 때, MVC 패턴을 적용하여 구조를 잘 설계하는 것이 중요Model데이터와 비즈니스 로직을 담당데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행View사용자 인터페이스를 담당사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현ControllerModel과 View 사이의 상호작용을 조정하고 제어사용자의 입력을 받아 Model에 전..
2024.05.14 -
[프로젝트 생성과 Git 연동] *편의기능* 1. Auto Import 2. Editor Zoom : Mouse Wheel [Gradle]빌드 자동화 시스템- Build : 소스 코드를 실행 가능한 결과물로 만드는 과정- Gradle을 사용하여 간편하게 Java 소스 코드를 실행 가능한 jar 파일로 만들 수 있음 build.gradleGradle 기반의 빌드 스크립트- 소스 코드를 빌드하고 라이브러리들의 의존성 쉽게 관리 가능- groovy 또는 kotlin 언어로 작성 가능필요한 외부 라이브러리들을 dependencies 부분에 작성 시 Gradle이 해당 라이브러리들을 Maven Repository와 같은 외부 저장소에서 자동으로 다운로드해옴 (https://mvnrepository.com/) ..
[TIL] 230513 <Spring> 학습 준비하기[프로젝트 생성과 Git 연동] *편의기능* 1. Auto Import 2. Editor Zoom : Mouse Wheel [Gradle]빌드 자동화 시스템- Build : 소스 코드를 실행 가능한 결과물로 만드는 과정- Gradle을 사용하여 간편하게 Java 소스 코드를 실행 가능한 jar 파일로 만들 수 있음 build.gradleGradle 기반의 빌드 스크립트- 소스 코드를 빌드하고 라이브러리들의 의존성 쉽게 관리 가능- groovy 또는 kotlin 언어로 작성 가능필요한 외부 라이브러리들을 dependencies 부분에 작성 시 Gradle이 해당 라이브러리들을 Maven Repository와 같은 외부 저장소에서 자동으로 다운로드해옴 (https://mvnrepository.com/) ..
2024.05.13 -
불변 객체 (Immutable Object) 공유된 참조 객체의 값을 변경하여 발생하는 문제들을 해결 가능→ 객체가 가지고 있는 필드(멤버 변수)를 변경할 수 없도록 설계 public class ImmutableReference { private final String name; //final로 선언하여 값 변경 불가 // 생성자만 값설정 가능 public ImmutableReference(String name) { this.name= name; } public String getName() { return name; } // final 키워드로 값의 변경이 불가능하여 해당 메서드 사용불가// public void setName(String..
[TIL] 240510 불변 객체(Immutable Object)불변 객체 (Immutable Object) 공유된 참조 객체의 값을 변경하여 발생하는 문제들을 해결 가능→ 객체가 가지고 있는 필드(멤버 변수)를 변경할 수 없도록 설계 public class ImmutableReference { private final String name; //final로 선언하여 값 변경 불가 // 생성자만 값설정 가능 public ImmutableReference(String name) { this.name= name; } public String getName() { return name; } // final 키워드로 값의 변경이 불가능하여 해당 메서드 사용불가// public void setName(String..
2024.05.10 -
⚠️ 수강생을 삭제하는 메서드 실행 시 ConcurrentModificationException 발생하였음 // 1-2) 수강생 삭제 (점수까지 삭제) public static void deleteStudent() { Scanner sc = new Scanner(System.in); System.out.print("삭제하고 싶은 수강생의 번호를 입력하세요 : "); int studentId = sc.nextInt(); boolean flag=false; for (Student student : studentList) { if (student.getStudentID() == studentId) { ..
[TIL] 240509 <트러블 슈팅> ConcurrentModificationException⚠️ 수강생을 삭제하는 메서드 실행 시 ConcurrentModificationException 발생하였음 // 1-2) 수강생 삭제 (점수까지 삭제) public static void deleteStudent() { Scanner sc = new Scanner(System.in); System.out.print("삭제하고 싶은 수강생의 번호를 입력하세요 : "); int studentId = sc.nextInt(); boolean flag=false; for (Student student : studentList) { if (student.getStudentID() == studentId) { ..
2024.05.09 -
>> sql문 실행 단축키 : ctrl + enter 사용할 수 없는 데이터가 들어있거나, 값이 없는 경우 방법1) 없는 값 제외 ● if(rating'Not given', rating, null)select restaurant_name, avg(rating) average_of_rating, avg(if(rating'Not given', rating, null)) average_of_rating2from food_ordersgroup by 1ㄴ 위의 코드를 실행 시 null인 row를 아예 제외하고 계산함 ● where 컬럼 is not nullselect a.order_id, a.customer_id, a.restaurant_name, ..
[TIL] 230508 <SQL> 없는 값 제외, 다른 값으로 대체, 범위지정, Pivot table, Window함수(Rank,Sum), 날짜포맷>> sql문 실행 단축키 : ctrl + enter 사용할 수 없는 데이터가 들어있거나, 값이 없는 경우 방법1) 없는 값 제외 ● if(rating'Not given', rating, null)select restaurant_name, avg(rating) average_of_rating, avg(if(rating'Not given', rating, null)) average_of_rating2from food_ordersgroup by 1ㄴ 위의 코드를 실행 시 null인 row를 아예 제외하고 계산함 ● where 컬럼 is not nullselect a.order_id, a.customer_id, a.restaurant_name, ..
2024.05.08 -
>> sql문 실행 단축키 : ctrl + enter REPLACE : 특정 문자를 다른 문자로 바꾸기replace(바꿀 컬럼, 현재 값, 바꿀 값) select addr "원래 주소", replace(addr, '문곡리', '문가리') "바뀐 주소"from food_orderswhere addr like '%문곡리%' SUBSTRING(SUBSTR) : (특정 위치의) 특정 문자만 조회substr(조회 할 컬럼, 시작 위치, 글자 수) select addr "원래 주소", substr(addr, 1, 2) "시도"from food_orderswhere addr like '%서울특별시%'// 서울지역의 음식타입별 평균음식 주문금액select substring(addr, 1, 2..
[TIL] 240507 <SQL> REPLACE,SUBSTRING,CONCAT,IF,CASE,Subquery,JOIN>> sql문 실행 단축키 : ctrl + enter REPLACE : 특정 문자를 다른 문자로 바꾸기replace(바꿀 컬럼, 현재 값, 바꿀 값) select addr "원래 주소", replace(addr, '문곡리', '문가리') "바뀐 주소"from food_orderswhere addr like '%문곡리%' SUBSTRING(SUBSTR) : (특정 위치의) 특정 문자만 조회substr(조회 할 컬럼, 시작 위치, 글자 수) select addr "원래 주소", substr(addr, 1, 2) "시도"from food_orderswhere addr like '%서울특별시%'// 서울지역의 음식타입별 평균음식 주문금액select substring(addr, 1, 2..
2024.05.07