본문 바로가기
  • 실행력이 모든걸 결정한다
개발 프로젝트/[팀] Web - SQL 교육 사이트

[팀 프로젝트] SQL 교육 사이트 - 20220917 안내 사항

by 김코더 김주역 2022. 9. 17.
반응형

1. 통보 사항

- 전반적으로 과제물은 다들 잘 작성했음

- 팀원 모두 각자 만든 엔티티에 대한 레포지토리 인터페이스를 잘 생성해줬기 때문에, 레포지토리의 save() 메소드를 통해 일관되게 데이터를 DB에 저장할 수 있었고 DB 저장 로직에서 EntityManager를 직접 사용할 필요가 사라졌음

 

 

 

2. 블로그 강의 내용★

1) @Primary 어노테이션

- EntityManagerFactoryBean, DataSource, TransactionManager bean은 각각 2개이기 때문에, 다음과 같이 자바 코드에서 bean의 이름을 통해 구분해야 했다.

@Transactional("transactionManager")
public void saveAllSampleData() {
    ...
}

 

- @Primary로 선정된 bean은 1순위로 적용되는 bean이기 때문에, 자바코드에서 이름을 명시하지 않아도 곧바로 적용된다.

@Bean
@Primary
public PlatformTransactionManager transactionManager() {
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(entityManagerFactory().getObject());
    jpaTransactionManager.setDataSource(dataSource());
    return jpaTransactionManager;
}

@Bean
public PlatformTransactionManager userTransactionManager() {
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(userEntityManagerFactory().getObject());
    jpaTransactionManager.setDataSource(userDataSource());
    return jpaTransactionManager;
}

 

@Transactional() // "transactionManager"가 자동으로 적용됨
public void saveAllSampleData() {
    ...
}

 

 

2) 특정 오브젝트만 검증하기

- @InitBinder의 파라미터에는 검증을 원하는 특정 오브젝트를 명시할 수도 있다.

@PostMapping("/test")
public String testResult(@Valid SQLData sqlData, BindingResult result, Model model){
    ...
}

@InitBinder("sqlData")
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new SQLValidator());
}

 

 

3) 웹 페이지에 이미지 삽입하기

(1) applicatoin.properties 설정

- static-path-pattern은 요청 형식이고, static-locations는 실제 정적 파일을 저장할 경로다.

spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

위의 설정을 해석하면, /static/** 형식의 요청을 정적 파일에 대한 요청으로 간주하고, classpath:/static/ 에서 정적 파일을 찾는다. classpath는 기본경로가 src/main/java, src/main/resources다.

요청 예시는 바로 뒤에서 살펴볼 것이다.

 

(2) <img> 태그 사용

<!-- <img>의 src 속성으로 이미지 경로를 지정할 수 있음 -->
<img src="/static/img/sql.png" width="300px" height="300px">

※ src, width, height 외에도 더 많은 속성이 있음

 

(3) 결과

 

 

 

3. 디자인

1) 로그인

- 홈을 제외한 모든 메뉴에는 로그인 없이 접근할 수 없게 만들 것

- 로그인은 Session을 이용하여 접속 유지를 시킬 것

- 로그인을 하지 않은 상태라면 회원가입 및 로그인 버튼을 출력

- 로그인 상태라면 해당 영역에 닉네임과 현재 학습 진행도를 progress bar로 표시하고 로그아웃 버튼을 출력

 

 

2) UI 초안

- 형태를 완전히 똑같이 할 것은 아니고 이러한 느낌으로 할 예정이라고 이해하면 됨

 

<홈>

가장 마지막에 설계할 예정

 

<SQL 학습 토픽 목록>

해당 토픽을 누르면 해당 <SQL 학습> 페이지로 이동

 

<SQL 학습>

개념 설명1 -> 예제1 -> 개념 설명2 -> 예제2 -> 개념 설명3 -> 예제3 -> .... 로 반복

하단에는 해당 토픽의 <SQL 테스트> 페이지로 이동할 수 있도록 함

 

<SQL 테스트 토픽 목록>

 

<SQL 테스트>

자유 형식으로 하되, ajax를 사용하여 채점 결과를 페이지 넘김 없이 확인할 수 있도록 표시할 예정

 

<게시판>

버그 게시판, 자유 게시판으로 나눌 예정

게시글 목록에는 각 게시글의 글 번호, 제목, 작성자, 댓글 수, 조회 수, 작성자를 표시한다.

 

<게시글>

게시글 조회 : 이름, 제목, 내용을 표시하고 그 밑에는 댓글을 표시

게시글 및 댓글 작성/편집 : 이름, 비밀번호, 내용을 표시

 

게시글 및 댓글 삭제 : 비밀번호로 검증

 

 

3) SQL 학습 및 테스트 범위

http://www.tcpschool.com/mysql/intro

 

(1) 첫 번째 토픽

- SELECT를 제외한 MySQL의 기초 지식을 학습

 

(2) 두 번째 토픽 ~

SELECT문(출력) 학습에 집중

 

자세한 범위는 다음 회의 때 결정하도록 합시다.

 

 

 

반응형

댓글