본문 바로가기

Spring

[SNS서비스] Controller에서 Repository 바로 접근하지 않기(Controller와 Service를 구분하는 이유) SNS 서비스를 만들 당시.. 시간 제한을 놓고 만들다보니 다시 소스코드를 보는데 매우 당연하지만 수정이 코드가 있었습니다.. 스프링 서버를 만들 때 Layered Architecture를 참고하여 크게 3가지 계층으로 나눌 수 있습니다. Presentation layer : View 사용자로부터 데이터를 입력 받거나, 데이트를 출력해 보이는 계층입니다. Control layer : Controller View에서 사용자의 요청을 받아 응답을 처리하는 계층입니다. 주로 비즈니스 로직을 결정하는 역할을 수행합니다. 사용자의 요청을 검증, 로직에 요청을 전달, 로직에서 반환된 응답을 적절한 뷰로 연결 합니다. Business layer : Service 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 .. 더보기
SNS 통합 피드 서비스 Spring을 공부하면서 무엇을 만들어볼까 고민하면서 OAuth 인증을 경험해보고 싶어 이 서비스를 만들게 되었습니다. 기본적인 기능들을 구현하였고 여기서 기능을 새로 구현하거나 기존 기능에서 고도화를 하면서 새로운 것들을 배워보려 합니다. - 기능 1. 자체 서비스 유저 회원가입 후 로그인 (SNS로그인 전 서비스 자체의 유저 로그인) 2. Facebook, Instagram 소셜 로그인 (Oauth를 통한 로그인) *(라이브 서비스를 위해서 사용자 정보 취급 이용 약관 작성이 필요, 정해진 테스트 계정으로 테스트해야 합니다.) * 중요: Facebook, Instagram 둘 다 개발 중인 상태로 지정된 테스트 계정을 제외하고 개인정보 취득 권한이 없습니다. 추후 수정 예정 3. 통합 피드 보기 버튼.. 더보기
[베네픽처 홈페이지] Controller, Repository 분리 베네픽처의 컨트롤러를 보면 좋은 객체지향 설계를 한 프로그램이라고 할 수 없는 부분이 있습니다. 자세히.. 아니 금방 찾으실 수 있는 큰 오류는 바로 Controller에서 Repository를 직접 사용하고 있다는 점입니다. 물론 처음 스프링으로 만들어보고 만들어보면서 고치자라는 생각으로 만든 프로젝트이지만.. 이런 부분을 놓친다는 것이 글로만 배운 내용을 직접 코딩해보는 것이 이렇게 중요하다는 것을 다시 한번 느꼈습니다..(백문이불여일타) - Controller에서 Repository를 직접 호출하면 안되는 이유 많은 이유가 있겠지만, 1. 중복되는 코드가 생깁니다. MyBatis를 적용하면서 깨닫게 된 이유입니다. 기존 JDBC Template에서 MyBatis를 적용하면서 중복되는 코드들을 그대로.. 더보기
[베네픽처 홈페이지] MyBatis 적용 이전까지는 JDBC Template를 적용하여 로그인, 공지사항, 광고를 관리하였습니다. 이번에는 MyBatis를 적용하여 DB에 접근해보려합니다. MyBatis 란 MyBatis는 자바 객체와 SQL 사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크 입니다. - 특징 1. 쉬운 접근성과 코드의 간결합니다. JDBC Template와 같이 JDBC 드라이버 로드, Connection, Statement 객체 생성 등등 복잡한 JDBC코드들을 자동으로 처리해주어 깔끔한 소스코드를 유지할 수 있습니다. 2. SQL문과 프로그래밍 코드를 분리하여 복잡한 쿼리나 다이나믹한 쿼리에 강합니다. xml파일로 따로 Mapper를 분리하여 다이나믹한 쿼리나 복잡한 쿼리를 .. 더보기
[베네픽처 홈페이지] 로그인 기능 구현 (세션, 서블릿 필터) 이전에 구현한 로그인은 단순히 DB에서 아이디와 비밀번호를 찾고 일치하면 해당 페이지를 보여주는 방식이였습니다. 이번에는 쿠키, 세션 방식을 활용하고 filter를 적용하여 로그인이 필요한 페이지를 구분하는 기능까지 구현하였습니다. 개념적으로 중요한 기술들이지만 우선.. 적용을 위주로 간략하고 짧게 설명하겠습니다. 쿠키 쿠키는 클라이언트(브라우저)에 저장되는 키와 값으로 이루어진 데이터 파일입니다. HTTP는 무상태 프로토콜입니다. 즉, 클라이언트와 서버가 요청과 응답을 주고 받은 이후 클라이언트가 다시 요청을 한다고해서 이전 요청을 기억하지 않습니다. 하지만 로그인 등 이전에 대한 기억이 필요한 경우 쿠키를 클라이언트에 저장 후 다음 응답에 쿠키를 같이 전달하여 이전의 기억을 유지할 수 있습니다. 쿠키.. 더보기
[베네픽처 홈페이지] JDBC Template 적용 (JDBC, SQL Mapper, ORM) 예전 Nodejs로 홈페이지를 만들 때는 MongoDB를 위한 ODM(Object Data Mapping) library를 사용하였습니다. Java 기반의 Hibernate. iBatis 등의 ORM(Object Relational Mapping)과 유사한 개념이라고 생각하면 편합니다. 이제 스프링으로 홈페이지를 새로 만들면서 바로 Mybatis를 적용해볼까 하다가 JDBC Template를 먼저 사용해보고 적용하는 것이 공부하는데도 도움이 될 것이라 생각하여 먼저 적용하게 되었습니다. JDBC 란 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API로 크게 3가지를 정의해서 "인터페이스"로 정의해서 제공하여 다양한 데이터베이스들을 표준화 해주는 인터페이스입니다. - Conneciton : 연결 -.. 더보기
[베네픽처 홈페이지] 요구사항 분석 베네픽처 홈페이지란? 흔히 볼 수 있는 회사 홈페이지입니다. 2019년도에 Nodejs로 개발하였지만 그 당시에는 객체지향의 개념도 많이 부족하여 주먹구구식의 개발을 한 것으로 스프링으로 새롭게 만들어보려 합니다. 로그인/회원가입, 광고 신청/ 조회, 관리자 페이지 등 백엔드 개발자로서 필요한 기본들이 들어 있다고 생각하여 스프링으로의 첫 개발 실습을 해보려고 합니다. 베네픽처 홈페이지를 다시 만들어보면서 이론으로만 배웠던 것들을 체득하려 합니다. (타임리프로 기능만 구현된 화면을 만들 생각입니다.) 요구사항 분석 요구사항을 분석하면서 중점으로 둔 것은 객체지향의 사실과 오해 책에서 본 상태를 중심으로 객체를 만드는 것이 아닌 행동을 중심으로 요구사항을 분석해나가려 합니다. 그렇다면 베네픽처 홈페이지의 .. 더보기