본문 바로가기
Sketcher

FullCalendar 와 DB 연동하기 -6 (코드 수정 & 매니저별 조회)

by 완두완두콩 2022. 3. 7.

이전의 포스팅들에서 뭔가 테이블 설계가 이상하다.. 쿼리문이 이상해.. 했었는데

다행히 회의에서 팀원들의 명석한 두뇌로 테이블을 대폭 수정했다.

테이블 수정하면서 기존 코드를 이것저것 바꿔야 하는게 좀 있었지만 마음이 후련하달까..

기본적인 스케줄 CRUD 는 이미 이전 포스팅에서 모두 이야기했기 때문에

추가적인 내용은 필요 없을 것 같다. ( 단지 테이블 구조가 바뀌어서 수정만 있었을뿐!..)

 

이번에 추가한 내용은 자잘한 오류 수정과,

A 매니저가 로그인 한 경우, A 매니저의 스케줄만 보이게 하는 로직을 짰다.

(로직이라 하기도 민망)

 

사실 메인은 이벤트 색상을 바꾸는걸 해보려 했는데

음.... 결국 이번에도 못했다.

모두 같은 색상도 통일성 있어서 좋지 않을까.. 

 

수정 & 추가


저장할 때 , alert 로 간단하게 매니저명과 잘못 입력한 경우 팝업을 띄우도록 했다.

문제는 데이터가 정상적으로 넘어감에도 계속해서 fail 문이 작동하면서

syntaxerror: unexpected token < in json at position 0

에러가 나타났었다.

 

뭐가 문제지 하고 찾아본 결과, dataType 과 contentType 을 둘 다 Json 형태로 보내주고

있었기 때문에 올바른 데이터 형태가 아니여서 에러가 발생했었던 것이였다.

contentType 을 지우니, xxx-formurlEncoded 형태로 데이터가 전송돼서 

dataType 을 지우니 에러 메시지도 뜨지 않고 정상적으로 작동했다.

 

해당 부분을 CRUD 전체 범위에 다시 설정해주었다.

 

그 외에는 자잘한 확인 팝업을 뜨게 만들었다!..

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 @GetMapping("/calendar")
    @ResponseBody
    public List<Map<String, Object>> showEachEvent(Principal principal) throws Exception {
 
        JSONObject jsonObj = new JSONObject();
        JSONArray jsonArr = new JSONArray();
 
        HashMap<String, Object> hash = new HashMap<>();
 
 
        String username = principal.getName();
 
        System.out.println("============================");
        System.out.println("username = " + username);
 
        if (username != null) {
            User user = userService.findByUsername(username).get();
            List<ManagerAssignSchedule> byUser = managerAssignScheduleService.findByUser(user);
 
            for (ManagerAssignSchedule managerAssignSchedule : byUser) {
                hash.put("title", managerAssignSchedule.getUser().getUsername());
                hash.put("start", managerAssignSchedule.getScheduleDateTimeStart());
                hash.put("end", managerAssignSchedule.getScheduleDateTimeEnd());
 
                jsonObj = new JSONObject(hash);
                jsonArr.add(jsonObj);
            }
        }
        log.info("jsonArrCheck: {}", jsonArr);
        return jsonArr;
    }
cs

위 코드가 로그인한 매니저 본인의 스케줄만 볼 수 있게 만드는 로직이다.

기존의 조회 부분과 비슷하지만 조금 다른 부분은 Principal 이라는 파라미터 값이 있는 것이다.

 

현재 진행하고 있는 프로젝트에서는 Spring Security 를 이용해서 회원을 관리하는데 

Principal 은 Spring Security 에서 구현된 기능을 이용하는 방식이다.

정확하진 않지만 스프링 시큐리티를 이용하는 경우, 사용자의 정보가 토큰에 저장되는데

이를 최상위 인터페이스인 Principal 에서 해당 정보를 꺼내와서 바로 값을 출력해준다.

다만 최상위 인터페이스이기에, 구현된 기능이 얼마 없어서 getName() 정도 꺼내오는 역할?..

 

원래는 HttpRequest 와 HttpSession 을 이용해서 session 에 저장된 값으로

이용할까 생각했다가 마침 스프링 시큐리티를 사용하고 있기도 하고, 

이름만 꺼내오면 문제 없었기에 Principal 을 사용했다.

 

(최근에는 Session & Cookie 보다는 JWT 를 많이 사용한다는 것을 본 것 같은데

나중에 공부해보는걸로!...)

 

현재 로그인한 매니저의 이름을 Principal.getName() 으로 꺼내오고,

해당 유저의 모든 스케줄을 List 형태로 뽑아온 뒤,

뽑아온 스케줄만 hash.put 으로 데이터를 Get 방식으로 보내주었다.

 

그 결과,

전체 스케줄
임시 1 의 스케줄

다음과 같이 특정 매니저의 스케줄만 받아옴을 확인했다.

 

 

마무리

 

이제 기본 기능은 문제 없이 다 작동한다!..

스케줄 CRUD 와 매니저별 스케줄 확인까지!..

 

이제 exception 이 터지는 경우 핸들링을 어떻게 해야할지와

이벤트 색깔.... 정도 남은 것 같다.

 

여담

 

try-catch 문을 사용하는 법도 잘 모르고 exception 처리하는 방법도 잘 몰라서 

조금 개인적인 공부가 필요한 부분이다.

현재 모든 부분에 exception 처리를 하지 않아서 조금 시간이 걸릴 것 같다.

 

이전의 포스팅에서 ApplicationRunner 클래스를 없애면 안돌아간다고 했었는데

팀원들 코드를 PullRequest 해서 주석 처리하고 돌리니 문제가 없다. (띠용)

 

다른 팀원들은 막 백엔드에서 페이징 처리하고 스프링 시큐리티 사용하는 등.. 여러가지 하고 있는데

나는 프론트에서 헤헤 Json 데이터 잘 넘어온당..

하고 있으려니 대단해보인다.. 

페이징 처리나 스프링 시큐리티 등 제대로 해본적이 없어서 뭔가 그런걸 할줄 안다는 사실들이

부러운 느낌?..

나중에 기존에 진행하던 토이프로젝트에서 적용해보자!..

 

다음편!

https://dodokong.tistory.com/56?category=1262083

 

FullCalender 성능 최적화(& 리팩토링)

FullCaleder 오픈소스를 이용한 스케줄 관리 졸업작품 프로젝트를 진행하는 도중 다양한 문제가 계속해서 발생했고 차근차근 수정하려 하는 중인데, 현재 직면한 가장 큰 문제는 쿼리 성능 최적화

dodokong.tistory.com

 

댓글