각종 후기/우아한테크코스

[우아한 테크코스 3기] LEVEL 2 방학 회고 (140일차)

제이온 (Jayon) 2021. 6. 21.

안녕하세요? 제이온입니다.

 

오늘로서 꽤 길었던 레벨 2 방학이 끝나게 되었습니다. 이 말은 즉슨, 내일부터는 레벨 3가 시작된다는 뜻이죠. 방학 기간동안 참 일어난 일이 많았습니다. 오늘 간단히 기록해보겠습니다.

 

 

대학생 현역 산업기능요원이 내년 부로 폐지되다.

 

5월 31일에 2022년 병역 특례 인원 배정 공고가 병무청에 올라왔습니다. 대수롭지 않게 들어갔으나 저에게 청천벽력같은 소식이 있었습니다. 바로 위와 같이 현역 대학생같은 3순위는 더이상 내년부터 현역 산업기능요원 인원이 배정되지 않는다는 것이었죠. 즉, 올해가 막차이므로 어떻게든 현역 티오를 주는 회사에 들어가야한다는 것입니다.

 

사실, 저는 방학 때 토이 프로젝트를 리액트까지 배워서 개발할 계획이었습니다. 토이 프젝과 면접 준비 딱 2가지만 할 계획이었는데, 갑작스러운 일이 생겨서 이틀 정도는 넋이 나가 있었습니다. 결국 주변 크루 및 제이슨의 도움을 받아서 어떻게 잘 멘탈을 추스리고 이력서를 작성하기 시작했습니다.

 

 

생애 첫 이력서

정말로 갑자기 이력서를 쓰게 돼서 참 당황스러웠습니다. 뭘 써야할지, 어떠한 형식으로 써야할지 하나같이 막막했습니다. 다행히 학교 선배 중에 보충역으로 일하고 있는 선배가 있어서 틀 자체는 잡을 수 있었습니다. 저는 처음에 노션으로 작성했고, 초안을 쓰는 데 약 3일이 걸렸습니다.

 

이후 제리와 로키의 도움을 받아서 핵심적인 정보만 보여주도록 리팩토링을 진행했고, 그때 리팩토링한 노션은 지금과 거의 유사합니다. 해당 링크에서 제 이력서를 참고하실 수 있습니다. 그리고 마지막으로 워니에게 해당 노션을 PDF로 변환한 이력서 첨삭을 부탁드렸습니다.

 

제 나름대로는 잘했다고 생각하였으나, 워니의 피드백을 보니 부족한 점이 참 많았습니다. 그 중에서도 우선적으로 반영해야할 피드백은 바로 기업용 이력서를 따로 만드는 것이었습니다. 노션은 정리하기 좋고 자유도가 높지만, 그대로 PDF로 변환하여 기업에 제출하기에는 부적합했습니다. 그래서 코딩몬스터님의 이력서 템플릿을 가져와서 워니의 피드백을 최대한 반영했습니다. 결과적으로 훨씬 깔끔한 이력서가 됐고, 이대로 제가 봐 두었던 여러 기업에 지원을 했습니다.

 

 

토이 프로젝트 - 건대생들의 Solved.ac 통계 애플리케이션

이력서에 올릴 만한 프로젝트는 딱 2개였습니다. 전자는 저의 토이 프로젝트였고, 후자는 레벨 2 마지막에 진행하였던 지하철 노선도 미션입니다. 그 중에서도 최근에 꽤 토이 프로젝트에 시간을 투자했고, 여러 가지 그동안 안 해봤던 기술을 적용해 보았습니다.

 

첫 번째는 스케줄링입니다. DB를 일정 시간 간격으로 업데이트해야 했기때문에 스프링에서 제공하는 스케줄링을 적용하였습니다. 그리고 배포용 테이블을 바로 업데이트하면 그 동안 유저가 이용할 수 없으므로, 업데이트용 테이블을 미리 만들어서 업데이트하고, 배포용 테이블과 업데이트용 테이블의 이름만 바꿔치기하는 방법을 사용했습니다.

 

 

@RequiredArgsConstructor
@Component
public class Scheduler {

    private final ProblemsProvider problemsProvider;
    private final UserInfoProvider userInfoProvider;
    private final ProblemService problemService;
    private final UserService userService;
    private final JdbcTemplate jdbcTemplate;

    @Scheduled(cron = "0 0 0/2 * * *")
    public void dbUpdate() {
        long start = System.nanoTime();
        final List<String> sql = new ArrayList<>(Arrays.asList(
            "truncate table TEMP_PROBLEM;",
            "truncate table TEMP_USER;",
            "truncate table TEMP_USER_PROBLEM_MAP;"));
        sql.forEach(jdbcTemplate::update);
        sql.clear();

        problemService.saveProblemsOnTemp(problemsProvider.getAllProblems());
        userService.saveUsersOnTemp(194L, userInfoProvider.getUserInfosInGroup(194L));
        userService.saveSolvedProblemsOfUsersOnTemp(194L, userService.findByGroupId(194L));

        sql.add("alter table PROBLEM rename to TEMP2_PROBLEM");
        sql.add("alter table TEMP_PROBLEM rename to PROBLEM");
        sql.add("alter table TEMP2_PROBLEM rename to TEMP_PROBLEM");

        sql.add("alter table USER rename to TEMP2_USER");
        sql.add("alter table TEMP_USER rename to USER");
        sql.add("alter table TEMP2_USER rename to TEMP_USER");

        sql.add("alter table USER_PROBLEM_MAP rename to TEMP2_USER_PROBLEM_MAP");
        sql.add("alter table TEMP_USER_PROBLEM_MAP rename to USER_PROBLEM_MAP");
        sql.add("alter table TEMP2_USER_PROBLEM_MAP rename to TEMP_USER_PROBLEM_MAP");
        sql.forEach(jdbcTemplate::update);
        long end = System.nanoTime();
        System.out.printf("스케줄링 작업 완료! 소요 시간: %d\n",
            TimeUnit.SECONDS.convert((end - start), TimeUnit.NANOSECONDS));
    }
}

 

 

이런 식으로 작성하였습니다. 물론 테이블의 이름을 바꾸는 그 짧은 순간에 동시성 이슈가 발생할 수도 있겠지만, 그정도로 사용자가 많지 않기때문에 이정도로 타협을 보았습니다.

 

 

두 번째는 Github Action을 이용한 CI입니다. push를 할 때 원격저장소에서 테스트를 돌림으로써 테스트가 통과하는지 안하는지 확인해 줍니다. 이 과정에서 설정 파일 부분은 서브 모듈을 통해 따로 관리하였습니다. Github Action을 통해서 CD까지 적용하고 싶었으나, 제가 우테코 AWS를 빌붙어서 사용하는지라 그쪽 설정을 할 수 없어서 일단 미뤄뒀습니다. 물론, 저는.... AWS 프리티어를 가입하였지만 마이크로 버전이 이상하게 뭐만 해도 자꾸 죽어 버려가지고 결국 우테코 AWS에 빌붙어서 미디엄 버전을 사용하고 있습니다.

 

 

서류 결과가 나오다.

오늘까지 총 9개의 기업에 지원을 했고, 그 중 4개의 기업에서 서류 결과를 알려주었습니다. 그 중 2개의 기업에 서류 합격하였습니다. 어디 기업인지 말씀은 드릴 수는 없으나 원하는 기업들 중 한 곳에 서류 합격을 받고 오늘 코딩테스트도 올솔을 해서 만족스럽습니다. 서류 합격한 나머지 한 기업도 오늘 코딩테스트를 응시하라는 메일을 받았습니다. 특이하게도 코딩테스트를 프로그래머스같은 플랫폼이 아니라 파일을 제공해주고, 그 파일에 있는 문제를 일주일안에 풀어서 제출하는 방식이었습니다.

 

저는 우테코를 병행해야하는 처지라서 이 방법이 오히려 좋았습니다. 해당 시험도 열심히 치뤄서 면접 기회라도 받았으면 좋겠습니다. 그리고 나머지 5군데도 좋은 소식이 있었으면 하는 바람입니다.

 

 

면접 준비

취업에 있어서 면접의 중요성이 엄청 크다고 생각합니다. 그런데 저는 이것저것 뭔가 많이 했어도 개념의 깊이가 얕다고 느껴졌습니다. 특히, 스프링 사용 방법을 다룰 줄 알지만 그 속의 원리는 잘 알지 못했습니다. 그래서 이번 방학 때는 스프링의 핵심 원리를 정리하자고 마음을 먹었죠.

 

그리고 김영한님의 인프런 강의가 정말 도움이 되었습니다. 스프링 기본편을 완강하였고, 스프링 MVC 1편도 현재 절반 들은 상태입니다. 내일과 모레 열심히 들어서 완강하고 관련 지식을 포스팅으로 작성할 예정입니다.

 

또한, 저는 인프라에서 Docker와 Nginx를 잘 모르고 사용만 했습니다. 이 부분도 당연히 간단한 기술과 뭐하는 친구들인지 정리할 필요가 있어 보입니다.

 

우선적으로 제 이력서에 적힌 기술들을 정리하고 나서 시간이 남으면 CS 지식을 검토할 예정입니다. 이 부분도 아직 2학년따리라서 참 부족한 것이 많습니다.

 

 

정리

17일 정도나 되는 긴 방학이었지만, 취준으로 인해 거의 쉬지 못했습니다. 이제 레벨 3는 팀프로젝트고 취준까지 병행해야 하는 입장에서 걱정은 됩니다. 그래도 주변에서 도와주는 사람들이 많고 의지할 수 있는 감사한 사람들이 많아서 저만 노력한다면 뭐든 가능할 거라고 생각합니다. 남은 기간도 열심히 해서 병특 회사에 취업할 수 있으면 좋겠습니다.

댓글

추천 글