실무프로젝트2_예시

예지성준·2024년 5월 27일
0

폴더는 깃 연동 안되어있던 새 폴더 만들어서 하기 수업 자료랑 git 겹치면 충돌날수도있음

레포지토리 새로 작성 후 인텔리제이 git연동하기
터미널 command prompt
git init
git remote add origin 레포지토리주소
git add .
git commit -m "initial upload"
git push origin master

현재 해당 레포지토리에 master브랜치로 올라간것을 확인할 수 있다.


master 제한하기

(협업경우 Collaborators에서 조원 초대)
레포지토리 settings -> Branches -> add branch rule

Branch name pattern master

✅Require a pull request before merging

  • 다른 작업자가 검토 해야지만 merge할 수 있도록 하려면 ✔require approvals 체크하기

✅Do not allow bypassing the above settings

작업 끝내는 시점마다 pull request 자주 해주기 ~~


인텔리제이에서 Git 브랜치 추가변경

🔽설정폴더 배제

+ UTF-8 Gradle 한글설정


기본 패키지폴더

sync 후

gradle run
gradle build
-> 배포파일 만들어짐

이 파일로 배포할것이다.

한글이.. 제대로 안나오는...


1. main 메서드 실행 클래스 설정 - build.gradle

2. 의존성 추가 - build.gradle

  • lombok
    compileOnly 'org.projectlombok:lombok:1.18.32'
    • annotationProcessor도 추가
  • ojdbc11
    implementation 'com.oracle.database.jdbc:ojdbc11:23.4.0.24.05'
    • runtimeOnly로 바꿔줌
  • orai18n
    implementation 'com.oracle.database.nls:orai18n:23.4.0.24.05'
  • mybatis
    implementation 'org.mybatis:mybatis:3.5.16'
  • slf4j-api
    implementation 'org.slf4j:slf4j-api:2.0.13'
    • logback-classic( api 구현체 )
      implementation 'ch.qos.logback:logback-classic:1.5.6'


3. 역할분담 모델

MVC 모델 - 역할분담

M: MODEL

  • 비지니스 로직 구현 , 다른 객체들과의 의존성이 필요하다.

Service: 기능/ ex) 회원 가입 기능 -> JoinService객체

  • DTO(Data Transfer Object): 데이터 전달 목적의 객체
  • Validator: 데이터검증 목적
  • DAO(Data Access Object): 데이터 접근 객체 즉, DB처리
  • VO(Value Object)

이 기능들이 유기적으로 동작한다.

V: VIEW

  • 처리 결과 데이터를 가지고 보이는 부분
    ex) 사용자 가입양식.. 회원목록 ...

C: CONTROLLER

  • 요청(사용자) -> 요청 처리를 위한 모델, 뷰를 서로 연결 <- 응답(뷰)
  • 모델과 뷰 사이의 중간에 중재하는 역할

DDD(Domain Driven Design)🌼
: 도메인 주도 설계

  • 도메인(Domain): 전문가 영역 - 구분될수있는 영역
    • 게시팜 도메인, 주문 도메인, 상품 도메인, 회원 도메인 ...

표현계층 - View
도메인계층
인프라계층(공통인프라) - DB ...

MSA(Micro Service Architecture)
: 서비스를 영역별로 (독립적) 나눠서 설계


4. Controller 설계

1) 메뉴 라우팅
공통 도메인

  • 메뉴 이동, 메뉴 변경할 수 있는 부분

인터페이스 설계

📌
+ Router 인터페이스 설계

🔼공통 상수를 정의하기위한 패키지

2) 컨트롤러
📌
+Controller 인터페이스

  • 템플릿 메서드 패턴: 특정 절차가 고정되어 있는 경우
    템플릿 메서드 패턴 틀 작성

  • AbstractController 템플릿 메서드 패턴 구현


도메인 분리

📌

  • member - controller
    +JoinController 회원가입 컨트롤러
    +LoginController 로그인 컨트롤러

📌

  • main - controller
    +MainController 메인 컨트롤러 - 제일 처음 나오는 화면

📌

  • main
    +MainRouter

  • 싱글톤 패턴 형태로 만들어서 공유 해주는게 자원 낭비가 없다.

  • 싱글톤 패턴 추가

📌

  • +AbstractController 템플릿 메서드에 change메서드 - 메뉴 컨트롤러 변경 처리

Application에서 main 실행해보자

📌
+AbstractController에서 common부분 작성해보고 공통적으로 나오는지 확인해보자


📌
+ControllerLocator

📌
+MemberControllerLocator

+MainRouter 수정


3) 뷰(View): template

📌

  • Template 인터페이스

📌

  • Templates 클래스

윈도우즈 인코딩 window949, CPC949, EUC-KR -> 한글을 2바이트로 표현하는 유니코드
UTF8: 한글 1자를 3바이트로 표현하는 유니코드

file.encoding 환경변수 UTF-8

  • D변수명=값
    java -jar -Dfile.encoding=UTF8 파일명.jar

String System.getEnv("환경변수명")

gradle build


📌
+MainController 수정

📌
+Templates 클래스 기능 추가/수정


기본틀이다앗....

📌
+Templates 수정

📌
+JoinTpl
회원가입쪽 기본 양식

JoinController 동작하는지 확인 코드수정

📌
+LoginTpl
로그인 기본양식

LoginController 동작하는지 확인 코드수정

+AbstractControler
공통 라인 추가


👩‍🏫
레포지토리에서 풀 리퀘 후 인텔리제이 master로 브랜치 이동

인텔리제이에도 pull하기

master쪽에서 member브랜치 새로 생성하고 브랜치 member로 옮기기

5. Model 설계

기능 - Service

  • DTO, DAO, Validator ...
    다른 객체의 협력을 통해서 하나의 기능을 완성

  • 회원이 입력한 데이터가 매개변수 -> 처리

  • 회원기능

    • 회원가입 -> 데이터 베이스 접근이 필요
    • 로그인 -> 데이터 베이스 접근

📌
+ JoinController
prompt Override 재정의

+AbstractController 코드추가

📌
+RequestJoin
사용자 입력 데이터를 전달 하기 위한 변수 정의 클래스

+ JoinController 추추추추가!

실행해복쟉


📌
+ LoginController
prompt Override 재정의

📌
+RequestLogin

📌
global
+Service 인터페이스 생성

기능처리 클래스

📌
+ServiceLocator 인터페이스 생성 - 서비스 찾기

+MemberServiceLocator 추가

+AbstractServiceLocator 추가

+ JoinController 추추추추가!

+ LoginController 추추추추가!


데이터베이스 접근 설정
마이바티스 설정 추가할거임 !!!

mybatis-config.xml

도커접속 도커접속 !!!!!!

터미널 커맨드 프롬프트
docker exec -it oracle-xe /bin/bash
sqlplus system/oracle
CREATE USER PROJECT2_1 IDENTIFIED BY oracle;
ALTER USER PROJECT2_1 QUOTA UNLIMITED ON USERS;
GRANT CONNECT, RESOURCE TO PROJECT2_1;
CONN PROJECT2_1/oracle

CREATE SEQUENCE SEQ_MEMBER;

마이바티스 xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <properties>
       <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
       <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
       <property name="username" value="PROJECT2_1"/>
       <property name="password" value="oracle"/>
   </properties>
   <environments default="dev">
       <environment id="dev">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="${driver}"/>
               <property name="url" value="${url}"/>
               <property name="username" value="${username}"/>
               <property name="password" value="${password}"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <mapper resource="org/choongang/member/mapper/MemberMapper.xml"/>
   </mappers>
</configuration>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.choongang.member.mapper.MemberMapper">
    <select id="" >

    </select>
</mapper>

...등등등... 추가 설정..

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글