본문 바로가기

분류 전체보기

(92)
[TIL] 객체지향 설계 5원칙(SOLID) 1. 객체지향 설계 5원칙(SOLID) 좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높여야 한다. 결합도 : 클래스간의 상호 의존 정도를 나타내는 지표로써 결합도가 낮으면 클래스간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리하다. B라는 클래스가 A의 클래스에 의존을 하고 있고, C라는 클래스는 B클래스에 의존하고 있다. 그런데 A라는 클래스에서 수정이 되면 B,C에도 모두 영향이 가기때문에 B,C도 모두 수정해줘야 한다. 꼬리에 꼬리를 물어 유지보수에 어려움이 있다. 응집도 : 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 클래스는 하나의 책임에 집중하고 독립성이 높아져 재사용 및 유지보수가 용이하다. 1-1. 단일 책임 원칙 어떠한 클래스를 변..
[TIL] 항해99 Day 25 항해 25일차 1. 일반적인 웹 애플리케이션 계층 구조 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 2. 클래스 의존관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용 3. 스프링 빈과 의존관계 컴포넌트 스캔과 자동 의존관계 설정 import hello.hellospring.service.Me..
[TIL] 항해99 Day 24 항해 24일차 1. thymeleaf 템플릿엔진 동작 확인 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리한다. 스프링 부트 템플릿엔진 기본 viewName 매핑 resources:templates/ +{ViewName}+ .html 2. 스프링 웹 개발 기초 정적 컨텐츠 MVC와 템플릿 엔진 API 정적 컨텐츠 이미지 3. MVC와 템플릿 엔진 MVC: Model, View, Controller 3-1. 템플릿 엔진 방식 @RequestParam 외부에서 파라미터를 받을때, Model에서 담고 view에서 랜더링 할때 사용 key = "name:" , value = name 3-2. API방식 @ResponseBody 를 사용하면 뷰 리졸버( vie..
[TIL] 항해99 Day 23 항해 23일차 명절이지만... 우리는 명절 없이 달린다. 개인 프로젝트 진행 중 게시물을 작성하는 post 방식에서 계속해서 오류가 발생했다. There was an unexpected error (type=Method Not Allowed, status=405). Request method 'POST' not supported 또 열심히 구글링을 해가며 해답을 찾아갔다. " @PostMapping annotation이 빠져있을 경우, 주고받는 방식이 맞지 않아서(예로 보낼때는 POST로 전송하지만 GET방식으로 받게 설정되있는지) 위와 같은 에러가 발생한다고 한다. 하지만 모든 경우를 체크해보았지만 모두 잘 연결되어 있었고 내가 봤을때 이상한 점이 전혀 없었다. 열심히 아주 열심히 삽질?을 하던 중 혹..
[TIL] 항해99 Day 22 항해 22일차 두번째 스프링 개인 과제를 하고있다... 스프링 봐도봐도 어렵다.. 이번 과제에 회원가입 / 로그인 기능을 추가해야 하기에 스프링 시큐리티를 찾아보았다. 1. 스프링 시큐리티 '스프링 시큐리티' 프레임워크는 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어 준다. import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.Enabl..
[TIL] 항해99 Day 20 항해 20일차 1. 스프링 MVC 이해 - Request Controller 와 HTTP Request 메시지 2. DI (의존성 주입) Controller 5 개가 각각 Service1 을 생성하여 사용 중 Repository1 생성자 변경에 의해.. ⇒ 모든 Contoller 와 모든 Service 의 코드 변경이 필요 "강한 결합"을 해결 방법 각 객체에 대한 객체 생성은 한번만 한다. 생성된 객체를 모든 곳에서 재사용 한다. 3. 웹의 인증 및 인가 인증 (Authentication): 사용자 신원을 확인하는 행위 인가 (Authorization): 사용자 권한을 확인하는 행위 4. 쿠키와 세션 쿠키와 세션 비교 스프링..어렵다...
[TIL] 항해99 Day 19 항해 19일차 1. 스프링 MVC Controller Client 의 요청을 Model 로 받아 처리 Template engine 에게 View, Model 전달 View: 동적 HTML 파일 Model: View 에 적용할 정보들 Template engine View 에 Model 을 적용 → 동적 웹페이지 생성 예) 로그인 성공 시, "로그인된 사용자의 id" 를 페이지에 추가 Template engine 종류: 타임리프 (Thymeleaf), Groovy, FreeMarker, Jade 등 (스프링에서 JSP 이용은 추천하지 않고 있음) Client 에게 View (동적 웹 페이지, HTML) 를 내려줌 2. Controller 와 HTTP Response 메시지 3. 스프링 MVC 동작원리 Cli..
[TIL] 항해99 Day 18 항해 18일차 개인 프로젝트를 끝내고 팀 과제를 진행했다. 핵심 키워드를 정리하는 과제였고 추가로 개인 프로젝트를 하면서 중요하다고 생각한 키워드에 대해 정리하는 과제였다. 🔐 JPA? Java Persistence API의 줄임말로 JAVA가 제공하는 API 이며 SQL을 쓰지 않고 Method를 통해 DB를 조작할 수 있다. 자바로 영구적(Persistence)으로 데이터를 저장하고 다루기 위해서 필요한 API라고 이해하면 된다. JPA는 JAVA로 데이터를 영구적으로 저장하고 다루기 위해서 여러가지 기능을 가지고 있다. 첫번째 기능은 JPA가 ORM 기술이라는 것이다. ORM은 Object Relational Mapping의 준말로 자바에서 만든 object를 데이터베이스의 테이블 형태로 변환하는 ..
[TIL] 항해99 Day 17 항해 17일차 우여곡절 끝에 프로젝트를 완성했다. 처음 기능 요구사항이었던 조회,작성을 완성했다.(HTML과 CSS는 크게 신경 안쓰고 작성을 했지만...오랜 시간이 걸렸다) 완성을 하고나니 조금 밋밋했다 기능이 너무 없다고 해야하나? 추가로 수정, 삭제 기능을 추가했다. 모달로 구현을 하였는데 처음 써봐서 그런지 많은 오류가 발생했다. 오늘도 역시 구글링... 모달창에서 '수정'버튼을 누르면 게시물 작성 모달창을 띄워 수정하는 방법으로 구상을 하였는데, 아무리 코드를 짜도 게시물 작성 모달창이 띄워지지 않았다. 3시간 넘게 구글링을 했던거 같다. 이것저것 시도해보다 결국 함수 위치가 잘못되었다는걸 알게되었다. 함수 위치를 모두 제자리에 놓고 기능 추가 구현까지 끝마쳤다. 처음 프로젝트를 진행하면서 1도..
[TIL] 항해99 Day 16 항해 16일차 개인프로젝트는 여전히 진행중이다. 어제 설계까지 끝냈고, 오늘부터 구현을 해보기 시작했다. 3. 동작확인 설계한 API가 잘 동작하는지 확인하는 단계이다. ARC 이용해 값들이 잘 오고 가는지 확인 해 주면 된다. 다행이 정상 작동 했다. 4. HTML, Javascript html과 javascript를 작성하는데 시간이 오래 걸렸다. 최대한 html은 신경쓰지 않고 주어진 기능을 우선으로 동작하는데 중점을 두었다. 이번 프로젝트도 SSR을 이용해서 구현을 해보려고 했는데 1주차 프로젝트에서 사용해봤기에 이번에는 모달을 이용했다. SSR도 익숙하지 않지만 우선 다양한 경험을 해보고 싶었다. 글쓰기 제목 작성자 내용 글쓰기 메인페이지 구성은 크게 어렵지 않았지만 문제는 모달창에 값을 가져오..