전체보기

    23.02.19. 취준 계획 (23.06.06. 수정)

    PS 일단 하루 2시간은 PS 해야 함. 하루에 daily leetcode challenge 문제 풀고, 프로그래머스 lv3까지 쭉 풀면 될 듯. 주말에는 하루 날 잡고 leetcode weekly challenge 도전하면 될 듯. 프로그래머스 끝나면 leetcode 쭉 풀자. 스터디 하자! - 23.07.31. 스터디 repository 생성 유의점 영어 듣기/말하기 향상을 위해 클레멘트같은 외국 PS하는 사람들 영상을 좀 보자. 문제 풀 때 주석 달아가면서 풀고, 최대한 한번에 돌아가게 풀어보자. 테스트 케이스를 생각하면서 풀자. edge case를 조심하자. CS 나머지 연등시간에 개념공부 하면 될 것 같다. 테크 1. (1.5달?) 3월까진 끝내보자. - 끝! java - OOP - SOLID ..

    [Java] Data types, 예외적인 String, 그리고 call by value

    이 글은 Java의 data type와 call by value를 정리한 글이다. data type에 따라 function parameter로 넘기고 값을 조작했을 때 어떻게 바뀌는지, 그리고 특히 예외적으로 작동하는 string의 동작 방식에 대해 정리했다. C++의 reference C++에서는 reference라는 변수형을 지정할 수 있다. C++에서 reference는 pointer처럼 동작하지만 변수처럼 사용할 수 있는, 변수의 주소값을 저장하는 변수이다. #include using namespace std; int main(){ int number = 10; int &reference = number; cout

    23.02.20. 풀었던 문제들

    리트코드 daily challenge - 35. Search Insert Position binary search(또는 lower bound)를 구현하는 문제. 내 포스팅에 작성되어 있다. 프로그래머스 lv.2 연속 부분 수열 합의 개수 환형 array라는 것에 착안해서 크기를 2배로 늘리면 쉽게 풀리는 3중for문 문제. 또는 조금 최적화해서 2중 for문으로 풀 수 있다. #include #include #include #include using namespace std; int solution(vector elements) { int size = elements.size(); elements.insert(elements.end(), elements.begin(), elements.end()); se..

    23.02.19. 풀었던 문제들

    리트코드 daily challenge - 103. Binary Tree Zigzag Level Order Traversal Binary Tree를 BFS를 써서 순회하는 문제. 처음 풀었을 때는 7ms(27.9%), 12.2MB(17.21%)가 나왔다. 왜 이렇게 많이 나왔을까.. 생각해 보고, 답안지를 보고 개선점을 생각했다. 개선점은 아래 코드에 주석으로 달아놓았다. typedef pair pni; // 개선 class Solution { public: vector zigzagLevelOrder(TreeNode* root) { int maxDepth = -1; vector answer; // BFS init queue q; q.push({root, 0}); while(!q.empty()){ // po..

    23.02.18. 풀었던 문제들

    리트코드 daily challenge - 226. Invert Binary Tree 처음 풀었을 때 3ms가 나왔다. DFS라는 함수를 따로 정의했기 때문인 것 같은데... 굳이 새로운 함수 안 짜고 바로 풀면 0ms가 나온다. 프로그래머스 lv 1 삼총사 3sum 문제인데, 여기서는 제한 조건이 널널해서 3중for문으로 풀어도 된다. 프로그래머스 lv 1 크기가 작은 부분 문자열 substring을 활용하는 문제 프로그래머스 lv 1 콜라 문제 반복문 쓰면 되는 수학 문제 프로그래머스 lv 1 푸드 파이트 대회 반복문 + reverse 쓰는 문제 프로그래머스 lv 1 가장 가까운 같은 글자 char c의 [이전 위치]를 기억해 두면 쉬운 문제. DP의 일종. 프로그래머스 lv 2 귤 고르기 크기별 귤 ..

    [OOP] 객체지향 프로그래밍 Object-Oriented Programming

    컴퓨터가 만들어진 후 초창기 프로그램은 대부분이 Procedural 프로그래밍이었다. 그러나 시작부터 끝까지 모든 순서를 정의하기에는 경우의 수가 너무 많고 코드가 꼬이기 십상이다. 그래서 나온 개념이 바로 Object-oriented이다. 객체지향이란? 객체지향에 대한 명확한 정의를 딱 내리긴 어렵고 사람마다 다양한 관점이 있지만, 나는 다음과 같이 정의한다. 객체지향이란 객체들의 상호작용으로 프로그램을 구현하는 방법이다. 객체란 어떤 개념을 추상화하고 모델링한 요소이다. 객체에 대해 좀 더 설명하자면, 어떠한 개념을 추상화하고 모델링을 통해 만든 요소이다. 객체는 상태(state)와 행위(behavior)를 가지고 있으며 행위를 통해 상호작용한다. Class vs Instance class는 inst..

    23.02.17. 풀었던 문제들

    프로그래머스 lv0 옹알이(1) - string 다루는 문제

    [Security] 복무하며 사용한 Spring Secure Coding

    세상에는 수많은 해킹 기법들이 있다. 학부생 때 컴퓨터 시스템 개론 과목을 들으면서 attack lab을 하며 buffer overflow를 처음 배우고 사용해 봤을 때의 충격이란... 정말 놀라웠다. 사실상 프로그램에 원하는 명령어를 넣는다는 것은 관리자 권한을 얻을수 있다는 말이고, 즉슨 해당 프로그램의 사용자 정보를 탈취하거나 서버 정보에 악의적인 공격을 해 막대한 손해를 끼칠 수 있다는 말이다. 따라서 코드를 작성할 때 이러한 공격을 방지할 수 있어야 한다. secure coding은 보안 취약점이 없는 코드를 작성한다는 의미이며, 안정적인 서비스를 위해 꼭 필요한 개념이다. 지금까지 SW개발병으로 근무하면서 수많은 보안 취약점들을 보아 왔고, 그 중 대표적인 몇 가지에 대해 어떤 문제가 있는지,..

    23.01.25. 포폴 계획 - 끝!

    포트폴리오 관리 - 1월 전까지 끝내기 프로젝트 리드미 작성 - 끝! 포폴/resume 만든 것 내용 채워넣기 - 끝! 해당 내용 기반으로 linkedin, programmers, remember, 원티드, 로켓펀치 등 프로필작성 - 끝! 취업준비 블로그 정리 - 작성중인 내용들 주말에 공부하고 작성하기. 알고리즘 graph부분 수정하기 - 끝! 책 읽기 - 산 책들, 살 책들 달에 1-2권씩 읽기 / 읽고 난 후 블로그에 정리하기 취업준비 (CS) PS, OS, DB, 네트워크, 아키텍처, Java, Spring, DS 등등 CS는 6개니까 2, 3, 4, 5, 6 이렇게 하나씩 끝내고 7/8에는 PS같은거 슬 준비하면 될 것 같다. CS는 내가 정리한 내용 기반으로 작성하고, 다른 사람들이 작성한 내..

    22.11.15. 취업 전까지 할 일들 - 끝!

    포트폴리오 관리 웹사이트 하나 파기 - 끝! github.io에 올리기 올라갈 것은 cv, web portfolio 이외에도 linkedin, programmers, remember, github readme 작성 - 끝! https://github.com/hyelie?tab=stars 참고 취업준비 github 정리- 필요 시 계속 갱신할 것 블로그 정리 - 뭔가 생기면 바로바로 기록하기 개발 책 읽기 - 공부는 끝이 없다 알고리즘(코테) 면접준비 기술 면접(OS, DB, 네트워크, ...) 외부활동 겨울 SES을 포함한 여러 군데 인턴 동아리 활동 전역 이후에... 8월 인턴은 거의 없는 수준. 다만, 하반기 공채 시작이 보통 9월이다. 그러니까 지금부터 취업준비를 한다고 생각하고 공부를 해야 한다는..

    22.11.07. 롤드컵 결승을 보고서 - "중요한 것은 꺾이지 않는 마음"

    어제 롤드컵 결승이 있었다. 4관왕에 도전하는 T1 Faker와 데뷔 9년만에 우승에 도전하는 DRX Deft의 매치업이었다. 결과는 DRX의 승리였다. 그야말로 "중요한 것은 꺾이지 않는 마음"이다. Deft는 항상 롤드컵 우승이라는 꿈을 그렸다. 10년만에 그 꿈을 달성했다. 내가 제일 잘 할 수 있는 게 롤인데, 그 롤에서 세계 최고가 되지 않는다면 앞으로 뭘 하든 실패할 것이라는 생각이 들었다. - Deft - 항상 질 것이라고 평가받던 DRX가 우승하는 모습은 소년만화를 보는 것처럼 나를 자극했다. 나는 뭘 하고 있는가? 나는 뭘 하고 싶은가? 나는... 많은 사람들에게 영향을 주는 사람이 되고 싶다. 인정받고 싶다. 어떻게? 내가 제일 잘 할 수 있는 분야로 - 그게 개발이다. 하나를 깊게 파..

    22.11.01. 프로젝트 미어캣 종료 이후 당분간 할 일들 - 끝!

    1. Bizkicks / Meerkat Figma 파일 백업하기 - 끝! 2. 미어캣 코드, 피피티, 영상 백업해두기 - 끝! 3. 리드미 꾸미기- 끝! 4. Meerkat 하면서 배운 것 정리하기 (RN, typescript, node, socket 등등) - 끝! 전역하면 뭐하지? AI? 대학원? 취업? 창업? 고민된다. 대학원에 대해 고민하는 이유도, AI에 대해 고민하고 있는 이유도 AI를 배워보고 싶은 마음?이 좀 더 큰 것 같다. 성공사례 하나만 보고 매몰되는 것 같기도 하고. 많은 것을 경험해 봐야 한다. 남은 복무일자동안 뭘 해야 할까? 취업을 위해서 알고리즘도 해야 하고, README와 블로그도 정리해야 하고, 책도 읽어야 한다. README와 블로그 정리를 끝내면 프로젝트도 하나 굴려봐..

    프로젝트 미어캣 후기

    https://github.com/osamhack2022/APP_Meerkat_IQDan 후기 거의 1달간 아무것도 안하고 코딩만 한 것 같다. 하면서 재밌었고, 엄청 많이 배우기도 했다. 조금만 생각해 봐도 git git branch 전략, commit message 협업 방식, git push flow(stash-fetch-rebase) commit template react-native hooks, state, component, re-rendering 등 react native의 working 방식 expo typescript node.js node.js의 MVC 구조, env를 이용한 배포 socket.io 채팅 앱의 동작 방식 ORM prisma 보안 종단간 암호화(E2EE), 디피-헬만 알고..

    [Socket.io] Socket.io를 이용한 실시간 채팅

    읽기 전에 Socket.io와 room에 대해 알고 있어야 합니다. Socket.io 공식 문서를 참고해 주세요. 채팅 로직 실시간 채팅을 위해서는 다양한 경우를 고려해야 합니다. 단순하게 모든 사용자가 socket 접속이 되어 있을 경우만 생각한다면 socket 이벤트만 전송하면 되겠지만 실제로는 그렇지 않습니다. 누군가는 인터넷 연결 환경 문제로 인해 오프라인이었다가 온라인이 되는 경우도 있을 수 있고, 누군가는 나중에 채팅을 확인하기 위해 앱을 껐을 수도 있습니다. 지금부터 미어캣이 이 경우의 수들을 어떻게 처리했는지 알아보겠습니다. 여기서는 실시간 채팅을 위해 socket.io를 사용합니다. 클라이언트에 2개의 socket 연결을 이용하는데, 하나는 실시간 메시징을 위해서이고 나머지 하나는 메시지..

    [Git] 개발 규칙 정하기 - Kanban과 commit 규칙

    혼자 일을 한다면 상관없지만 git에서 협업을 한다고 치면 많은 애로사항이 있을 것이다. 누가 무슨 일을 하는지, commit은 어떻게 하는지, conflict가 발생하면 어떻게 하는지, ... 이걸 해결하기 위해서 협업할 때 어떻게 git을 사용하는지 볼 것이다. Kanban (할일 정리) 진행상태, 업무에 따라 칸을 나누고 각 칸에 이슈를 적어 현재 업무 현황을 한눈에 파악하는 시스템입니다. 해당 리포 내에 Projects에서 칸반 정리를 하기로 했습니다. 모든 티켓들은 이슈화를해서 자동으로 고유번호가 매겨지게할 것입니다. 예시로 #4번이 부여되면 관련 커밋은 MK-4로 작성하시면됩니다. 티켓(이슈)은 완료 후 archive처리하고 close issue를 해주어야합니다. 왜 칸반을 쓰는지 누가 무슨일..

    [Utils] 쓸만한 VS Code extension들

    Color Highlight #000000처럼 작성한 색깔 코드를 색으로 보여줍니다. Git Lens 코드가 언제 적혔는지, 누구에 의해 적혔는지 등등 코드 작성자에 대한 내용을 보여줍니다. Markdown Preview Mermaid Support & Markdown Editor 마크다운 에디터. mermaid와 md 파일을 미리보기로 보여줍니다. Prettier 코드 정렬해주는 기능입니다. TODO Tree & TODO Highlight 작성한 'TODO' 등의 태그를 하이라이트해서 보여주고, 그 태그들을 tree로 보여줍니다. 태그는 추가할 수 있습니다. ngrok 개발 중, 포트 우회가 필요할 때 사용하면 좋습니다.

    [Utils] 마크다운 API 명세 템플릿

    가능하다면 gitbook이나 swagger같은 공유 가능한 API 명세서를 쓰는 것이 제일 좋겠지만, 그렇지 못할 때는 markdown이라도 써서 API를 명세해야 합니다. 개인적으로 gitbook의 명세가 상당히 마음에 들어서 비슷하게 템플릿을 만들어 봤습니다. 적용한 모습은 다음 페이지에서 참고하면 됩니다. https://github.com/osamhack2022/APP_Meerkat_IQDan/wiki/API-Specification 코드는 아래와 같습니다. # 일반 API 명세 ![](https://img.shields.io/static/v1?label=&message=GET&color=blue) ![](https://img.shields.io/static/v1?label=&message=POST..

    [Git] git commit template 적용

    Commit Conventions https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits A specification for adding human and machine readable meaning to commit messages www.conventionalcommits.org 협업 시, commit할 때 commit message만으로도 코드 수정 내용을 유추할 수 있게 작성해야 한다. 그렇게 하면 코드 리뷰할 때도 편하고, 이슈 트래킹, 티켓 트래킹할 때도 편해진다. 따라서 commit 시에는 규칙을 지켜 작성해야 한다. git commit -m "commit message 내용... commit message 본문... comm..

    [Spring] Spring 메일 발송 - 회원가입 인증 메일/ID 찾고 메일로 전송/비밀번호 변경 및 임시 비밀번호 메일로 전송

    https://offbyone.tistory.com/167 https://velog.io/@ehdrms2034/Spring-Security-JWT-Redis%EB%A5%BC-%ED%86%B5%ED%95%9C-%ED%9A%8C%EC%9B%90%EC%9D%B8%EC%A6%9D%ED%97%88%EA%B0%80-%EA%B5%AC%ED%98%84-4-%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85-%EC%9D%B8%EC%A6%9D-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EC%95%84%EC%9D%B4%EB%94%94-%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EC%B0%BE%EA%B8%B0 https://m.blog.naver.com/jny9708/22177..

    "인생"

    - 한 번에 답을 찾으려 하지 말자DT에서 배웠지만, 모든 아이디어를 수용하고, 제일 좋은 것을 뽑자. 비관적인 태도는 아이디어 뽑는 데 장애물이 될 뿐이다. Good And,,,로 생각을 해보자.- 내 인연들21년에 자취하면서 혼자서만 사는 게 생각보다 다르다는 걸 느꼈다. 사람이 주는 안정감을 인정하고, 주변에 편할 때 만날 수 있는 친구를 두자. 일도 중요하지만 나를 좋아해주는 고등학교 친구들, 대학교 친구들/선후배들, 소마 팀원들을 좀 더 높은 우선순위에 놔 보자.- 나?사교적인 성격은 아니다. 친해지면 편하다. 경험적으로 데이터를 쌓고 분석하고, 그래서 정보 수집에 초점이 있는 사람이다. 사교적인 것도 조금 배워보자.- 미래?내가 하는 분야에서 '별'이 되어보자

    21.08.19. 의지

    요새 시대에 투자나 창업은 불가피하다, 단순히 취업만으로 평생을 벌어먹고 살긴 힘들 것이다. 그래서 창업을 하던, 창업을 하는 팀에 조인하는 방법이 있을 것 같은데... 문제해결력은 있지만 기획능력이 떨어지고, 리스크를 지기 싫어하는 나로써는 조인하는 방법이 제일 좋을 것 같다. "모든 사업가 밑에는 핵심 엔지니어가 있다"... 그리고 창업 초기에는 자본을 아끼기 위해 특정 분야를 99%로 잘하는 3명보다는 여러 분야에서 80%로 잘하는 1명이 더 중요하다고 한다. 또 내 장점이 뭘까? 생각해 보면, 명세능력, 되게 가파른 러닝커브, 목적의식, 정도라고 생각한다. 그러면 90%로 여러 분야를 다 잘하는 사람이 되어서 초기 창업 CTO로 활동할까?를 생각해 보면... "만능과 잡캐는 한 끗 차이" 즉 모든..

    2022년 1월 SW개발병 지원 및 면접 질문

    취업 해야하니까 SW개발병에 지원했다. 일단 소프트웨어 마에스트로 활동 있고, 3학년 수료(4학년 재학), 정보처리기사로 38점을 받았고 1차 합격했다. 글 작성날인 11월 12일에 면접자들 만나서 이야기 해 본 결과, 커트가 36점 정도인 것 같다. 35점인 어떤 분은 1차 떨어졌는데 면접포기 한 분이 있어서 추가합격 했다고 한다. 면접 준비는 평소대로 한 것 같다. 자기소개나 장단점 등 기본적인 신상, 군대니까 안보관이나 친화력 등, CS쪽 지식, 내가 한 플젝에 대한 내용 등을 준비했다. 면접 질문 - 자기소개 나는 안 물어봤다. 포트폴리오를 내서 그런가? - 지원동기 코딩을 제일 잘하고, 제일 잘 하는 걸 군대에서도 이어나가고 싶고, 내 개발이 육군에 긍정적으로 작용했으면 좋겠다. 또한 지원에 가..

    [Git] git mirroring 하기

    올해 말에 인턴을 생각하고 있어서 지금까지 했던 흩어져 있는 프로젝트를 정리하고 있다. 그래서 git 저장소를 미러링 해야 한다. gitlab은 아직 작업 중이고, 과거에 진행했던 팀 프로젝트를 모아야 한다. 1. 끝난 프로젝트 mirroring 1) clone --bard 해서 로컬에 가져옴. 명령어는 아래와 같다. git clone -bare https://......~~~.git (가져올 repository) 2) clone한 곳으로 이동한다. 3) git push --mirror로 push. 명령어는 아래와 같다. git push --mirror https://....~~~.git (새로 저장할 repository) 이렇게 하면 완료된 프로젝트의 커밋 기록까지 다 가져온다. 2. 진행중인 프로젝트..

    [Spring] Spring image 업로드 / 다운로드(리턴) / 인코딩

    spring에서 서버로 image를 업로드 해야 하는 경우가 있다. 일반적으로 database에 이미지를 넣지는 않는데, 생각하기에는 - front - back - db로 총 2번 이미지를 넣어야 함 - db로 넣으면 binary 형식으로 이미지가 저장되는데 낭비임 - file system에서 굳이 binary로 바꿀 이유가 없다. 이 2가지 정도 이유가 있는 것 같다. 그래서 일반적으로 A에 대한 이미지는 A entity에 A 이미지가 있는 path를 db에 넣고, 조회/수정/삽입/삭제 할 때 해당 path를 이용해서 저장하는 것 같다. 먼저 항상 그렇듯 의존성 추가 해 준다. build.gradle implementation 'commons-io:commons-io:2.6' 다음으로 applicati..

    [Spring] Spring exception handler 추가 - ambiguous handler

    기존에는 아래와 같이 ResponseEntityExceptionHandler를 상속받아서 handling 했었다. @Slf4j @RestControllerAdvice public class GlobalExceptionHander extends ResponseEntityExceptionHandler { // 입력 정보가 다를 때 // sql에 중복되어 있을 때 @ExceptionHandler(value = {DataIntegrityViolationException.class}) protected ResponseEntity handleIntegrityViolateException(){ log.error("handleDataException throws Exceptions : {}", ErrorCode.PAR..

    [Spring] slf4j를 이용한 spring logging

    로그의 목적은 아래 2가지 정도가 있다. - 서비스 동작 상태 파악 - 장애 파악 및 알림 logging은 slf4j 등 로그 라이브러리를 사용할 것이다. 로그 레벨 - fatal : 어플리케이션 종료까지 만드는 error. - error : 의도하지 않은 오류 발생, 종료는 안 됨. - warn - info : 서비스 동작 상태 - debug : 개발자가 보기 위한 것 - trace 인데, '의도하지 않은 에러'를 나타내는(ex. database connection error) error, 기록을 남기기 위한 info 2개를 사용하면 될 것 같다. 또 로그는 파일로 작성할 거고, 너무 많이 쌓이면 다른 것으로 빼 주어야 한다. https://victorydntmd.tistory.com/173?categ..

    [Spring + Swagger] Swagger 사용

    swagger는 controller에 @RestController annotation을 붙인 것들에 대해, api 명세 목록을 제공해주는 명세 자동화 툴이다. build.gradle implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' 이것들 추가한다. 다음으로 config를 만들자. SwaggerConfig.java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket a..

    [Spring] Custom Exception Handler

    Spring에서 exception을 다루는 방식에 대해 다룰 것이다. 총 4개의 파일을 만든다. 디렉토리 구성 exception - CustomException.java - ErrorCode.java - ErrorResponse.java - GlobalExceptionHandler.java 이렇게 된다. 1. CustomException RuntimeException을 extend한 것으로, 선언한 ErrorCode를 가지고 있다. exception/CustomException.java @Getter @AllArgsConstructor public class CustomException extends RuntimeException{ private final ErrorCode errorCode; } 2. ..

    [Spring + Jwt] Spring Boot + Spring Security + Redis + Jwt를 이용한 회원가입 및 로그인

    https://bcp0109.tistory.com/301 이 글을 많이 참고했다. spring security를 이용하는 이유는 spring에서 로그인 기능을 구현하기 위해서이고 session이 아니라 token을 사용하려 하는 이유는 앱 환경에서 로그인을 유지시켜주기 위함이다. jwt는 그 이유 때문이고, redis는 jwt를 관리하기 위함이다. 1. 환경 설정 https://blog.naver.com/jhi990823/222509215989 위 게시글을 따라가면서 docker 위에 redis를 올리면 된다. https://blog.naver.com/jhi990823/222505297298 이후엔 이 게시글을 참조해서 redis를 사용할 수 있는 함수를 만든다. build.gradle implement..

    build server 부터 배포까지 - 5. GKE Spring Redis 배포 - Local, CI Server, Deploy Server에서 Redis와 연동

    이번엔 로그인 기능에서 사용하는 토큰을 올리기 위해 redis를 올려보고자 한다. 1. Local /application.properties spring.redis.host=127.0.0.1 spring.redis.port=6379 이걸 추가한다. /local/docker-compose.yml version: "3" services: mysql: image: mysql:5.6 environment: MYSQL_DATABASE: bizschema MYSQL_ROOT_PASSWORD: rootpw MYSQL_USER: devroot MYSQL_PASSWORD: devpw LANG: C.UTF-8 volumes: - local-mysqlvol:/var/lib/mysql ports: - 3306:3306 com..