관점 지향 프로그래밍(AOP)
·
WEB/BackEnd
🤷‍♂️ 관점 지향 프로그래밍(AOP)란 무엇인가?개발을 하다 보면 종종 핵심 비즈니스 로직과 직접적인 관련은 없지만, 꼭 필요한 부가 기능들을 마주하게 됩니다.예를 들어, 모든 기능에 로그를 남기거나, 트랜잭션을 처리하고, 보안 검사를 수행하는 등의 작업들이있습니다.이러한 부가 기능들은 애플리케이션 전반에 걸쳐 반복적으로 나타나기 때문에 코드를 복잡하게 만들고, 유지보수를 어렵게 만드는 원인이 되기도 합니다. 이 문제를 해결해 주는것이 관점 지향 프로그래밍(AOP)입니다.AOP를 한마디로 정의하자면 '핵심 비즈니스 로직'과 '부가 기능'을 분리해서 개발하는 것입니다.비지니스 로직 vs 부가기능비즈니스 로직(Core Concern): 사용자가 원하는 실제적인 기능(예: 게시글 등록, 상품 주문 등)부가..
ERD + API 명세서
·
MANAGEMENT
ERDERD정의ERD (Entity Relationship Digagram)는 객체 + 관계를 중심으로 표시하려 데이터베이스의 구조를 보기 쉽게 그려놓은 다이어그램이다. 업무내용을 기반으로 약속된 표기법에 의해서 데이터를 표현함으로서 데이터베이스 설계에 도움을 준다.ERD 구성요소1) 엔티티(Entity)엔티티란 정의되는 사물 또는 개념을 뜻한다.예를 들어 회원, 상품, 주문 등의 예시가 있다.데이터 베이스에서의 테이블이 엔틴티로 표현되어진다.2) 엔티티 속성(Attribute)엔티티의 속성은 엔티티가 가지고 있는 요소를 의미하게 된다.예를 들어 회원엔티티는 이름, 성별, 주소, 휴대폰 … 등과 같은 요소를 가지고 있다.데이터베이스에서의 필드가 엔티티 속성이라고 생각하면 된다.3) 주 식별자 (Prima..
SpringBoot & JPA - 쇼핑몰 프로젝트(애플리케이션 구현)
·
WEB/BackEnd
SpringBoot & JPA - 쇼핑몰 프로젝트(환경설정 및 도메인 모델 테이블 설계)Springboot에 대해서 약 한달정도 공부를 했지만 직접 프로젝트를 작성하는 것이 아닌, 이론 공부만 해서 내가 이걸 잘 다룰 수 있을까? 하는 생각이 있었기에 이번기회를 통해서 쇼핑몰 프로젝트code-apprentice.tistory.com해당 게시글을 이어서 쇼핑몰 프로젝트 어플리케이션 구현한 내용을 정리해 보았습니다.기본구조크게 Controller → Service → Repository → DB의 방식으로 구현되고 추가적으로 Domain(Entity가모여있는 계층)이 있다Controller 계층은 컨트롤러가 모여있고 Controller는 서비스계층 호출 및 결과값을 JSP에 넘겨주는 역할을 한다.Servic..
SpringBoot & JPA - 쇼핑몰 프로젝트(환경설정 및 도메인 모델 테이블 설계)
·
WEB/BackEnd
Springboot에 대해서 약 한달정도 공부를 했지만 직접 프로젝트를 작성하는 것이 아닌, 이론 공부만 해서 내가 이걸 잘 다룰 수 있을까? 하는 생각이 있었기에 이번기회를 통해서 쇼핑몰 프로젝트를 김영한 강사님의 강의와 책을 참고하여 만들어 보려고 한다.환경설정먼저 기본적인 환경설정은 아래와 같이 해주면 된다.(http://start.spring.io를 이용했다.)의존성은 아래와 같이 Spring Web, Thymeleaf, JPA를 추가 해줬습니다.책과는 다르게 database는 Oracle을, 빌드툴은 gradle을 사용해서 했습니다.gradle 설정plugins { id 'java' id 'org.springframework.boot' version '3.5.0' id 'io.spring.dep..
JPA - 연관관계 및 매핑
·
WEB/BackEnd
기본 개념🌿JPA 연관관계란?JPA의 연관관계란 엔티티(클래스)들 사이의 관계를 정의하는것 입니다. 데이터베이스에서 테이블 간의 외래키(FK)를 이용해 나타내는 관계를 자바 코드 상에서 명확하게 표현하는 것을 의미합니다.예를 들어, 게시판을 구현하고자 할때에, Board(게시글), User(사용자), Reply(댓글), Group(팀)과 같은 엔티티가 있다고 가정해보겠습니다.누가 게시글의 작성자인지를 알아야 작성자가 수정, 삭제할 권할을 가질 수 있기 때문에 게시글과 사용자는 연관관계를 가집니다.뿐만 아니라 사용자 엔티티는 댓글, 팀 과 같은 다른 엔티티와도 연관관계를 가지게 됩니다.이러한 연관관계를 객체에서는 참조로, 데이터베이스에서는 외래키를 이용하는데 이러한 관계를 매핑하는것이 목표가 됩니다.JP..
JPA기초
·
WEB/BackEnd
김영한 - Java ORM 표준 JPA 프로그래밍기존 JDBC방식의 문제점Sql을 직접 다룰때의 문제점Sql기반 개발의 문제점들은 아래와 같다진정한 의미의 계층 분활이 어렵다.엔티티를 신회할 수 없다.예를 들어 Member 객체에 Team이라는 객체가 존재하고 Team객체의 name요소를 얻기 위해 아래와 같은 코드를 작성했다고 가정해 보자.member.getTeam().getName();이때 member.getTeam()이 null인 경우 오류가 발생하기에 항상 이러한 요구사항이 있을때마다 DAO코드를 열어서 항상 SQL을 확인해서 어떠한 객체들이 함께 조회되는지를 일일이 확인해야 한다.SQL에 의존적인 개발을 피하기 어렵다.또한 반복되는 부분이 상당히 많아진다.아래 두 코드는 servlet과 기존 사..
스프링 - 의존성 주입(Dependency Injection DI) 개념
·
WEB/BackEnd
스프링 프레임워크의 의존성 주입과 결합도 관리스프링 프레임워크가 제공하는 주요한 기능중 하나인 DI(의존성 주입)에 대해서 알아보도록 하겠습니다.결합도와 인터페이스의 중요성개발을 하다보면 항상 변경사항이 존재합니다. 예를들어 UI → Service → DAO → DB와 같은 구조가 있다고 가정해 보겠습니다.이때, DAO 계층의 B1 코드의 알고리즘이나 라이브러리가 변경되었을 때, 저희는 두 가지 선택지가 있습니다.B1 코드를 직접 수정한다B2 코드를 새로 작성하고 이를 사용하도록 변경한다두가지 경우 모두 수정과정에서 기존코드를 수정해야하는 번거로움이 발생한다.// 변경 전private B1 b = new B1();b.getData();// 변경 후private B2 b = new B2();b.getDat..
[김영한 스프링 입문] 웹개발 기초 및 회원관리 프로젝트(일부)
·
WEB/BackEnd
스프링 웹개발 기초정적페이지파일에 어떠한 처리도 하지 않고 순수한 html파일을 반환해 주는것웹브라우저에서 요청을 보냄 → 내장 톰켓 서버가 해당내용을 받아서 Spring에게 넘겨줌 → 이때 먼저 Controller에 mapping이 되어있는지 확인을 하고 / 만약 없다면 resources/static파일에 위치한 정적인 html파일을 반환해 준다.MVC와 템플릿 엔진php, jsp와같이 서버에서 프로그래밍을 해서 html을 약간 변경해서 반환해주는것.과거에는 jsp(view)에서 모든걸 다 처리했다.(model 1 방식) → 이러한 방식은 유지보수가 굉장히 어렵다는 단점이 있다.따라서 model2방식인 model, view, controller가 나뉘어서 개발되는 방식이 사용되어진다 아래와 같이 사용된..