[리뷰] 헤드퍼스트 자바 -자바로 여는 무한한 객체지향의 세계
도서 리뷰2024. 2. 24. 18:03[리뷰] 헤드퍼스트 자바 -자바로 여는 무한한 객체지향의 세계

선택 이유 '헤드퍼스트 자바'는 평소에도 이름은 들어봤던 도서 중 하나였습니다. 약 20권의 도서 제공 목록 중 본 도서 을 다음과 같은 이유로 선정하게되었습니다. 개발자라면 반드시 알아야하는 객체지향을 소개합니다. 두뇌가 쉽게(head first) 이해할 수 있는 예제를 활용하여 자바와 객체지향에 대해 설명했습니다. 개념을 이해하는 것을 넘어 쉽게 활용할 수 있도록 실전 능력을 기를 수 있습니다. 잠깐.. 왜 Head First인가? 이 책에서 두뇌는 길게 늘어쓴 글보다는 그림을 더 중요하게 여긴다고 설명합니다. 분명히 아무런 의미 없는 호랑이 사진이며 독자를 사냥할 것도 아닌데도 뇌는 호랑이 사진에 집중하게 됩니다. (두뇌가 먼저 반응하는 = Head First) '헤드퍼스트 자바'에서는 이러한 점을..

html에서 React로 마이그레이션 시 겪었던 문제점
트러블 슈팅2024. 2. 5. 17:25html에서 React로 마이그레이션 시 겪었던 문제점

서론 난 왜 이걸 하고 있는가? 현재 교수님이 속해 있는 회사의 렌딩페이지를 급하게 만들어야 했습니다. html5up이라는 html 예제 모음 사이트에서 가져와서 내부 콘텐츠만 변경하여 작업하기로 결정하였습니다. 다운받은 예제는 외부 라이브러리 없이 html, css, js만으로 구현되어 있습니다. 이를 추후 간편한 수정을 위해 React로 마이그레이션을 진행해야만 했습니다. 무슨 문제에 봉착했는가? 다운받은 템플릿(live demo)에 속해있는 js 기능이 정상적으로 동작하지 않았습니다. React에 포함되어 있는 /public/index.html의 body 태그 내 마지막 줄에 js를 불러오는 script 태그를 추가했지만 실패했습니다. 본론 작업에 실패했던 이유 React의 동작 방식에 대한 이해 ..

대학생 둘이서 사업단 찾아가서 후원금 받고 해커톤 개최하는 이야기
회고록2024. 1. 29. 08:00대학생 둘이서 사업단 찾아가서 후원금 받고 해커톤 개최하는 이야기

자기소개 저는 경남권 대학에서 메가브레인이라는 컴퓨터공학과 학술 동아리를 운영하고 있습니다. 이번에 교내에서 컴퓨터공학과 학우를 대상으로 학술 해커톤을 개최하였으며 이에 대한 회고를 한번 해보고자합니다. 해커톤 기획 해커톤 개최가 이번이 처음은 아닙니다. 작년에도 저랑 (전)팀장과 함께 동아리원만을 대상으로 해커톤을 개최해보았습니다. 다만 기존 동아리 내에서 진행하는 팀 프로젝트와의 차이점을 크게 못 느꼈었습니다. 그래서 이번 해커톤에서는 새로운 인연과 재미를 목적으로 하여 모집 대상을 컴퓨터공학과, 디자인학과 학우분들을 대상으로 기획하게 되었습니다. 어떻게 하면 참여자를 많이 모집할 수 있을까? 코로나 시기 이후로 학생의 "동아리는 의무다."라는 관념이 사라져서 저희가 행사 참여자를 모집한다고 하더라도..

Java2024. 1. 23. 15:03Assert를 통해 좋은 코드 작성하기

서론 최근 Github에서 코드를 살펴보던 중 assert 키워드의 존재를 알았습니다. 학교에서는 들어보지도 못한 키워드였지만 assert만의 장점이 굉장히 매력적이어서 한번 글로 남겨보고자합니다 예시 코드는 Java로 작성하겠습니다. 본론 Assert란 무엇인가? assert는 대부분의 언어에 존재하는 코드가 올바르게 동작하는지를 확인하는 용도의 키워드입니다. assert는 '표명하다'라는 의미로 조건(condition)과 함께 사용할 수 있습니다. 런타임 중에 Assert 키워드를 만나면 condition을 확인합니다. true이면 다음 라인으로 넘어가고 false라면 AssertError를 발생시킵니다. Assert의 장점이 무엇인가? Assert를 사용하지 않아도 if를 활용하여 충분히 올바르게 ..

#1 Java I/OStream이란
Java/의존성 제거 시리즈2024. 1. 2. 12:00#1 Java I/OStream이란

서론 이 시리즈는 3개월간 Spring, Docker, Jetbrains ide, Non-standard libraries etc 하이레벨 기술을 사용하지 않고 서비스를 구현해보는 시리즈입니다. 누구보다 자동화, 숏컷, 프레임워크를 좋아하지만 너무 맹목적으로 기술에 의존하지 않기 위해 공부합니다. 또한, 개인이 작성한 블로그 글을 읽지 않고 공식 문서만을 읽으면서 공부하며 자동완성, 붙여넣기 기능을 사용하지 않습니다. 기준: JDK 8 I/O Stream이 무엇인지 알아볼 것입니다. 본론 Stream이란 Stream은 '(계속) 흐르다'라는 의미를 가지고 있습니다. 저희가 일상에서 들을 수 있는 용어는 스트리밍(Streaming)으로 Java에서는 자원의 입/출력을 이야기합니다. 자바에서는 데이터를 I/..

Java/의존성 제거 시리즈2024. 1. 1. 12:00#0 시리즈 소개

이 시리즈는 3개월간 Spring, Docker, Jetbrains ide, Non-standard libraries etc 하이레벨 기술을 사용하지 않고 서비스를 구현해보는 시리즈입니다. 누구보다 자동화, 숏컷, 프레임워크를 좋아하지만 너무 맹목적으로 기술에 의존하지 않기 위해 공부합니다. 또한, 개인이 작성한 블로그 글을 읽지 않고 공식 문서만을 읽으면서 공부하며 자동완성, 붙여넣기 기능을 사용하지 않습니다. 이 시리즈에서 주제는 웹을 주로 다루며 Stream과 Tomcat을 통해 서버를 구축할 것이고 Redhat 계열의 Linux을 이용하여 온프레미스 서버를 구축할 것입니다. 이 과정 중 문제가 발생하면 구글링보다는 공식문서를 더 읽어볼 것 입니다. 당연한 말이지만 AI는 절대로 이용하지 않습니다.

[회고록] 2023년의 경험으로 가는 인생 방향성
회고록2023. 12. 6. 08:00[회고록] 2023년의 경험으로 가는 인생 방향성

지방 기술 컨퍼런스 참여 이번년도 들어서 기술 컨퍼런스에 대해 많은 관심이 생겼습니다. 학술동아리(이후 메가브레인.) 선배들과 어떻게하면 지방에서 좋은 개발자가 될 수 있을까 이야기를 나누던 중 저희는 애초에 경남권에서 진행하는 기술 컨퍼런스조차 찾아보려 하지 않았다는 것을 깨달았습니다. 뉴스와 유튜브에서 항상 지역 인프라의 차이, 지방 소멸만 이야기하니 우리 지역 진행하는 개발 행사는 별로일거라고만 생각하고 있었습니다. 그래서 근처 지역인 부산권 기술 컨퍼런스에 최근 1주간 참여했습니다. 센텀 디지털 위크 2023(부산 센텀을 판교 뛰어넘는 디지털 혁신 중심지로 만든다는 바로 그 사업), DevFest Busan 2023 에 참여했습니다. 실제로 참가해보고 느낀점은 제 생각보다 부산권의 컨퍼런스는 질이..

vim adventue 6 - 3 solution
How to.2023. 10. 28. 14:46vim adventue 6 - 3 solution

rB - e - e - x - j - j - ^x - w - w - l - rt - e - x

vim adventure 6 - 1 solution
How to.2023. 10. 28. 14:07vim adventure 6 - 1 solution

go down side b * 3 times dw

[MySQL 복구 2] binlog를 통해 데이터베이스 복구하기
트러블 슈팅2023. 9. 8. 03:01[MySQL 복구 2] binlog를 통해 데이터베이스 복구하기

로컬 환경에서 ibd 파일을 이용하여 데이터를 복구하려고 했습니다. 일부 테이블이 스키마 불일치 문제로 복구되지 않아서 바이너리 로그로 복구를 진행해봤습니다.혹시 저처럼 DB를 날려버리신 분들을 위해 제 삽질과 더 빠른 DB 복구를 위한 본 글을 작성합니다. 도움이 되었으면 좋겠습니다. 이해하기MySQL에는 바이너리 로그라는 파일이 존재합니다. 사용자가 사용했던 쿼리들이 기록되어 있는 파일입니다. (SELECT는 예외)DB 생성 시부터 binlog.000001으로 매일 binlog 파일이 생성되며 1씩 증가합니다.MySQL에 설정되어 있는 binlog 보존 기간만큼만 저장되다, 보존 기간을 초과한 파일은 삭제됩니다. 때문에 binlog 파일이 1부터 시작하지 않는다면.. 이미 옛 binlog 파일들은 삭..

[MySQL 복구 1] .ibd 파일을 이용하여 데이터 복구하기
트러블 슈팅2023. 9. 8. 02:24[MySQL 복구 1] .ibd 파일을 이용하여 데이터 복구하기

혹시 저처럼 DB를 날려버리신 분들을 위해 제 삽질과 더 빠른 DB 복구를 위한 본 글을 작성합니다. 도움이 되었으면 좋겠습니다. 이해하기데이터 복구를 시작하기 전에 복구에 필요한 데이터를 설명드리겠습니다..ibd 파일: 각 테이블의 데이터가 저장된 파일(InnoDB)MySQL: ibd파일을 생성했던 MySQL 동일한 버전의 MySQL(완전히 동일해야 합니다.).frm 파일: 각 테이블의 스키마가 저장된 파일(8.0 버전부터 삭제됨).ibd파일은/var/lib/mysql/{database_name}/{table}.idb 이런 경로로 존재합니다. 데이터베이스 구동 환경 구축삽질을 하며 시간이 DB 구축과 삭제를 너무 많이 하게 되어서 docker-compose.yml으로 환경을 구축하였습니다. # dock..

[NestJS] eslint를 작성해보자.
Node.js2023. 8. 23. 19:12[NestJS] eslint를 작성해보자.

eslint 수정을 결심하게 된 계기기존의 eslint는 프론트 중심적으로 작성되어있거나, git diff 리딩에 불편하게 되어있어요. 개요tab indent를 4로 변경했어요.javascript는 tab indent를 2로 권장하지만, 백엔드에서는 early return 패턴을 사용하기 때문에 tab depth가 깊어질 일이 없어요.코드 가독성은 향상시키고 node.js 특유의 코드 편집기 우측이 텅텅 비어있는 것을 해결했어요.array, object 구조를 설정했어요.백엔드는 array, object가 길어질 경우가 많은데, 이런 경우 예외처리가 되어있지 않아요.eslint 기능을 사용하여 제약을 걸어 해결했어요.그 외도 코드리딩을 고려해서 작성했어요.git diff를 읽을 때 온점이나 쉼표 혹은 괄..

Github Convention 깃헙 컨벤션 정리/모음
How to.2023. 8. 21. 15:37Github Convention 깃헙 컨벤션 정리/모음

Github 컨벤션은 목적에 따라 필요할수도 있고, 오히려 과할 수도 있습니다. 팀단위로 진행하는 프로젝트에서 컨벤션이라는 추상화를 통해 불필요한 커뮤니케이션을 줄일 수 있어 유용하며, 이후 취업 준비 중에는 본인의 역량을 github issue, PR에 깔끔하게 정리하여 깔끔하고 매력적인 포트폴리오를 만들 수 있습니다. 글에 들어가기 앞서 본 컨벤션이 적용된 Repository와 Github Convention 정리 글을 알려드립니다. 경남 경매 서버 레퍼지토리(Spring boot) 경남 경매 서버 레퍼지토리 서버 코드 github.com Code Convention 경남 경매 서버 레퍼지토리 컨벤션 Wiki github.com 내가 선정한 올바른 Github Convention의 조건 각자가 맡은 ..

원클릭 회원가입 승인 구현(telegram bot, AWS s3, Flutter, Nest.js)
Node.js2023. 7. 21. 20:14원클릭 회원가입 승인 구현(telegram bot, AWS s3, Flutter, Nest.js)

서론 학교 애플리케이션을 개발 중, 학생증 사본을 통해 학생 인증을 하는 기능을 구현하려고 합니다. 사용 기술: nest.js 9.4.1 node-telegram-bot-api 0.61.0 aws s3, ec2 결과물: 실제 운영되는 프로덕션입니다. 1. telegram 봇 발급 이번에 구현 방식을 조사해보며 telegram을 선택하게 된 이유는 아래와 같다. p2p 방식으로 높은 기밀성 빠르게 개발할 수 있는 개발자 친화적 플랫폼 1. BotFather 검색 후 추가 2. /start 명령어를 입력하여 채팅을 시작해주세요. 3. /newbot 명령어를 입력하여 새로운 봇을 만들어주세요. 4. 봇 이름을 입력해주세요. 네이밍 규칙은 마지막이 bot으로 끝나면 됩니다. (대소문자 무관) 이름이 이미 존재하..

크롬의 탭은 프로세스일까? 스레드일까?
CS2023. 6. 6. 17:27크롬의 탭은 프로세스일까? 스레드일까?

서론 면접 질문으로 크롬의 탭은 프로세스인지 스레드인지, 그리고 왜 그렇게 생각하는지에 대해 질문이 왔다. 이 글에서는 브라우저가 탭을 어떻게 관리하는지, 그리고 왜 그렇게 관리하는지를 조사해보려구 한다. 고맙게도 Chrome Developer Blog에서 브라우저 관련 내부 동작 원리를 설명해주는 글이 있다. 이 글에서도 설명하겠지만, 자세한 내용은 아래 내용 참고. 웹 브라우저의 내부 살펴보기 크롬의 탭은 프로세스다. (멀티 프로세스) (나는 프로세스로 답했다가, 경량화 문제를 의심하고 멀티 스레드라고 답을 바꿨다.) 크롬은 멀티 프로세스를 사용하며 IPC(Inter Process Communication, 프로세스 간 통신)을 사용한다. 만약, 특정 탭이 응답하지 않을 때는 동작하지 않는 탭의 프로..

돈이 없는데 서버의 하드디스크가 꽉찼다. (docker chromium)
트러블 슈팅2023. 6. 4. 23:16돈이 없는데 서버의 하드디스크가 꽉찼다. (docker chromium)

서론. 기존 git pull && yarn build && yarn run으로만 관리하던 프로젝트의 메모리가 꽉찼다. 아래는 프로젝트 관련 파일을 다 삭제한 상태.. 그래도 8%의 여유공간밖에 없다. 문제 인식: 어째서 프로젝트가 이 모양이 되었는가? ec2 8GB 1 인스턴스를 사용하고 있다. (t2.micro) 우리 프로젝트는 크롬 드라이버를 활용하여 크롤링을 진행하는데 크롬 드라이버가 용량을 많이 차지하는 것이 의심된다. 크롬 브라우저, 크롬 드라이버를 설치하고, 여러 라이브러리(git, npm etc)들에 의존하기 때문에 설치한 라이브러리들이 굉장히 많다. 아마도 같이 설치되고 삭제되지 않은 데이터들이 숨어있는 것이 문제일 것이다. 해결 방안: 어떻게 해결할 것인가? 우선, 메모리를 늘리는 것은 ..

NEXTERS 23기 면접 후기
회고록2023. 6. 3. 18:29NEXTERS 23기 면접 후기

면접 막 끝나고 바로 면접 후기를 씁니다.. 면접 진행 zoom으로 비대면으로 진행 각 면접 대기실으로 입장되고 면접 시간이 되면 소 회의실로 옮겨짐. 2:2 30분으로 진행되었으며, 저와 면접을 같이본 분은 경험 많은 고수분.. 질문 목록 면접 안내 중 면접 질문 목록을 공유하지는 말라는건 없었으니 작성하겠습니당. 문제있으면 메일주세요! 면접은 개인의 포폴 및 자소서에 맞춰서 한다. 나는 CS공부를 했던것을 적어서 CS질문이 몇가지 왔고, Nest.js라는 비주류 개발언어를 써서 그런지 프레임워크에 대한 질문은 안왔다. 인성 질문 프로젝트를 같이하지 싫은사람은? 그리고 그 사람이랑 팀이 되었다면? 기술질문 DB 트랜잭션 ACID에 대해 설명해라. 사용한 데이터베이스를 선택한 이유는 무엇인가? DB 인덱..

내일은 NEXTERS 면접일이다 (2023년 상반기 피드백)
회고록2023. 6. 2. 15:33내일은 NEXTERS 면접일이다 (2023년 상반기 피드백)

면접을 앞두고.. 내일은 NEXTERS 23기 백엔드 면접일이다. 이게 첫 NEXTERS 준비는 아니다. 22기에 서류를 지원했다가 떨어졌었기 때문이다. 이번 글에서는 면접을 보기 전에 전에 떨어진 사유를 복기 해보려고 한다. 22기를 떨어질 때.. 그 당시의 나는 1학년으로써는 꽤나 나쁘지 않았다. 스스로 프로젝트도 진행해보고 다른 팀원들과의 원활한 커뮤니케이션을 위해 slack, notion, trello 등을 공부했다. 이를 잘 어필해서 컴퓨터공학과 신입생으로써 SW마에스트로에 합격했다. 거품거품 열매 근데 SW마에스트로를 수료할 때 쯤, 나는 컴공 1학년이 아니라 SW마에스트로 13기 최약체였다. 주변의 평과 실제 내 실력에 괴리감이 느껴질 때 NEXTERS 22기를 지원했다. 거품 인간은 서류탈..

[GO]클래스 없는 객체지향 언어
GO2023. 5. 24. 16:39[GO]클래스 없는 객체지향 언어

서론 객체지향 프로그래밍(OOP) 패러다임으로 개발하다보면 class를 잘 사용하는 것이 잘하는 개발자일 것이다. 이번에 공부해본 GO 언어는 class를 사용하지 않는 객체지향 언어이다. 어떻게 class 없이 객체지향 프로그래밍이 가능한지 살펴보자. OOP의 3요소 캡슐화: 정보 은닉 상속: 재사용 + 확장 다형성: 사용편의 클래스스럽게만 사고하고 개발했다면 GO를 만났을 때 충격받을 것이다. GO는 코드의 간결성과 성능을 위하여 클래스 문법을 직접적으로 제공하지 않는다. GO의 객체지향 인터페이스 (Interfaces): 인터페이스는 함수의 집합으로 정의되며, 해당 인터페이스를 구현하는 구조체는 자동으로 인터페이스를 따르게 . 인터페이스를 사용하여 다형성을 지원하고, 코드의 유연성과 재사용성을 향상..

[NestJS] TypeORM을 통한 트랜잭션 관리
Node.js2023. 4. 30. 19:02[NestJS] TypeORM을 통한 트랜잭션 관리

서론 NestJS에서 관계가 묶여있는 여러 테이블에 INSERT를 해야하는 경우가 있습니다. 이 글에서는 TypeORM을 통해 트랜잭션을 관리해보겠습니다. 트랜잭션 관련 글 https://puleugo.tistory.com/142 데이터베이스 트랜잭션이란? 트랜잭션(Transaction) 트랜잭션: 데이터베이스 관리 시스템에서의 최소 상호작용의 단위 개요 데이터베이스 트랜잭션은 데이터베이스에서 수행되는 일련의 작업이며 모두 단일한 논리적 작업 단 puleugo.tistory.com https://puleugo.tistory.com/143 트랜잭션 격리 수준 데이터베이스 트랜잭션 격리 수준 데이터베이스 트랜잭션의 격리 수준은 격리성(각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야한다는 규칙)의 견고함..

개발자는 도적질을 해야한다.
생각 정리2023. 4. 19. 17:10개발자는 도적질을 해야한다.

By. 공자 생각 없이 배우기만 하면 얻는 것이 없고, 생각만 하고 배우지 않으면 오류나 독단에 빠질 위험이 있다. 잘하는 개발자는 도적질을 일삼는다. 코드의 유지보수성보다 빨리 굴러가야하는 경우가 있다. 애자일이나 배포가 시급한 경우.. 그리고 항상 살아남는 코드는 동작하는 코드들이다. 코드 도적질은 빠르게 동작하는 코드를 얻을 수 있으며, 사고의 확장까지 할 수 있다는 이점이 있다. 이번 글에서는 어떻게 효율적으로 도적질을 하며 최신 도적질 트렌드를 알아보려고 한다. 글 컨셉 때문에 성장은 레벨업이라고 표현하겠다. 개발자가 되고 싶은 자는 나에게... 좋은 선례를 도적질하라. 회사의 기술 블로그나 공신력있는 개발자의 코드를 도적질해라. 코드가 없다면, 그 사람의 학습 방식을 도적질하라. 회사의 기술블..

"우아한 도적질"
How to.2023. 4. 9. 19:26"우아한 도적질"

우아한 테크 블로그를 읽다가 양질의 파일럿 프로젝트들이 공개되어 있는걸 처음 알았습니다. 테크 블로그 사랑합니다. 우아한 형제들 개발자들이 고민한 흔적들이 기록되어 있어서 이를 정리하고 정리본을 공유하려고 합니다. 공부할 때 사용하면 좋을 것 같습니다. 노션 페이지 Nest.js로 풀어보는 중인 레퍼지토리

Refresh Token을 사용하는 이유(Feat. Redis)
트러블 슈팅2023. 4. 7. 19:43Refresh Token을 사용하는 이유(Feat. Redis)

개요 리프레시 토큰을 Redis에 저장한다는 사례를 들어서 직접 구현해봤습니다. Token Based Authenticaion, Refresh Token을 공부해보았습니다. 결론: 해당 방식은 비효율적이고 보안적 가치가 없는 방식이었습니다. What is Redis? 레디스는 인메모리 방식의 데이터베이스입니다. Diff Basic DB vs In-Memory DB 기존 DB(e.g. mysql, postgreSQL)은 보조기억장치에 데이터를 저장합니다. 그래서 많은 양의 데이터를 오래 저장하는 데에 적절합니다. 인메모리 DB(e.g. Redis, MemCache)는 주기억장치에 데이터를 저장합니다. 그렇기에 데이터 조회 성능이 월등히 빠릅니다. 주기억장치를 이용하기 때문에 RAM의 휘발성 메모리의 특징도..

인덱스의 카디널리티, 복합키의 성능 최적화
트러블 슈팅2023. 3. 30. 19:25인덱스의 카디널리티, 복합키의 성능 최적화

서론 학교 백엔드 CS 스터디 중 카디널리티라는 키워드가 나왔습니다. 설명 들었을 때 처음듣는데 중요하다고 생각되어 조사해보고 정리해본 후, 개발했던 프로젝트 리팩토링을 진행하였습니다. 카디널리티(cardinality)이란? 우리 레코드를 조회할 때 인덱스를 정의합니다. 인덱스를 정의할 때 우리는 카디널리티가 높은 것을 사용합니다. 카디널리티란? 해당 컬럼의 중복된 수치를 말합니다. "성별, 학년, 국적 등은 카디널리티가 낮다"라고 말하며, 반대로 "학번, 주민등록번호 등은 카디널리티가 높다"라고 말합니다. 우리가 성별, 학년같은걸 인덱스로 잡진 않죠? 그렇다면 복합키(여러 컬럼을 인덱스로 구성)를 사용한다면 어떻게 될까요? 우선, 복합키의 예시를 가져와보겠습니다. 위 이미지의 user-auths 테이블..

팀원이 설정한 알람이 내 폰에서 울려야한다.
트러블 슈팅2023. 3. 28. 20:09팀원이 설정한 알람이 내 폰에서 울려야한다.

팀원이 설정/수정한 알림이 내 폰에서 울려야한다. 서론 프로젝트를 전부 구현해놨더니 기획을 엎어버렸다. 내가 기획팀한테 타 서비스와의 차별성과 방향성이 애매하다고 하긴했지만, 이런 결과를 원한 것은 아니다.. ㅠㅠ 지인들은 기획팀을 엎으라고 했지만, 더 나은 결과물을 위한 것이니 좋게 생각하고 있다. 개선된 기획안은 이렇다. "열정은 있지만 팀프로젝트를 할 사람이 필요한 사람들에게 마음맞는 팀원을 구할 수 있는 TODO 및 캘린더 기능과 커뮤니티를 제공해준다." 여기서 TODO, 캘린더 기능이 팀 단위로도 설정할 수 있기 때문에 본인이 아닌 다른 팀원이 추가, 수정한 알람이 내 폰에서 울려야한다. 본론 FCM쓰면 되긴하는데 학생이니 구현 경험을 쌓고 싶었다.. 내가 조사해본 결과 우리 프로젝트에 가장 ..

FK란 무엇인가? 각 관계형은 어떤 경우에 가장 효율적인가?
CS2023. 3. 24. 18:55FK란 무엇인가? 각 관계형은 어떤 경우에 가장 효율적인가?

서론"FK란 무엇인지, 왜 사용하는지, 언제 사용하는지 설명해주세요." 모의 면접에서 질문이 나왔다. 이부분을 조금 더 깊게 공부해보려고 한다. FK란 무엇이고 왜 사용하는가?Foreign Key는 외래키라고 부른다. RDBMS에서 관계를 지정할 때 사용합니다. 하지만, FK 말고 일반 컬럼으로도 관계를 표현할 수 있지만, 그럼에도 FK를 사용하는 이유는 *참조 무결성 제약조건을 설정할 수 있기 때문입니다. (참조 무결성은 RDBMS에서 FK와 PK간의 일관성을 유지하는 것입니다.) 관계의 종류는 어떻게 되나요?기본적으로 RDBMS에서는 아래 네가지 종류의 관계를 지원해줍니다.One-to-OneOne-to-Many / Many-to-OneMany-to-Many 각 관계 매핑에 따라 장단점과 적절한 예시를..

어떨 때 composite key를 사용해야 할까?
트러블 슈팅2023. 3. 19. 02:36어떨 때 composite key를 사용해야 할까?

https://github.com/inje-megabrain/waka-board-be GitHub - inje-megabrain/waka-board-be Contribute to inje-megabrain/waka-board-be development by creating an account on GitHub. github.com 이번 게시글에서 쓰일 프로젝트다. 프로젝트 요구 사항은 아래와 같다. 동아리 WAKATIME 관리 프로젝트이다. 테이블에는 코딩 시간이 저장된다. (20분마다 갱신됨) 조회하는 케이스는 둘이다. 오늘 코딩 시간 조회 지난 n일전에 얼마나 코딩했는데 조회 및 평균 계산 로그를 id로 직접 조회할 일은 없다. DB 설계 테이블 소개 user: wakatime 이용자의 계정 정보를 ..

생각 정리2023. 3. 17. 18:00개발자에게 글쓰기가 필요한 역량일까?

https://dev.gmarket.com/30 개발자의 글쓰기는 다르다. 안녕하세요. Seller & SD Engineering 팀 박명훈입니다. 기존에는 프로젝트나 기술적인 내용에 중점을 주어 글을 작성했는데 오늘은 내용을 좀 환기하여 개발자의 글쓰기에 대해 이야기합니다. 회사에 dev.gmarket.com 위 글을 읽고 느낀점, 학생 개발자로써 느낀 점을 이야기해보려고합니다. 개발자에게 글쓰기는 중요한가? 아니요. '개발자'에게 글쓰기는 중요하다고 말할 수 없습니다. 다만 글쓰기를 하였을 때 메리트는 있습니다. 본인의 생각을 타인에게 보여줄 수 있고, 글쓰기를 하는 사람의 생각은 글을 작성하며 한번 정리되기 때문에 꽤나 확고합니다. 그렇다면 이렇게 다시 물어볼 수 있습니다. 성장을 관점으로 봤을 때..

내가 생각하는 좋은 개발자란?
생각 정리2023. 3. 17. 15:50내가 생각하는 좋은 개발자란?

어제 동아리 선배와 커피챗을 했다. 그러다 학생 개발자의 성장을 주제로 이야기하게 되었는데, 그 내용을 글로 다시 적어보려고 한다. 내가 생각하는 좋은 개발자란? 지금 내가 생각하는 좋은 개발자는 프로덕트를 개발할 수 있으면서 어떻게 개발하였는 지 설명할 수 있는 개발자다. 물론 이를 아는 것은, 개발자가 사용하는 모든 도구에 대한 대략적인 이론, 작동원리 등을 이해하고 있어야만 가능하다. 그래서 대기업에서는 컴퓨터 이론을 학습한 컴퓨터 관련 전공자를 선호하는 것이라고 생각한다. 때문에 개발자로서 먹고살려면 본인이 사용하는 프레임워크의 함수가 뭐가 있는지 보다. 도구 그 자체를 이해하고 있을 필요가 있다. (우리가 CS를 배워야하는 이유) 커뮤니케이션이나 소프트스킬같은것도 물론 중요하지만 그런 부분까지 ..

CS2023. 3. 15. 16:09데이터베이스 Lock이란

데이터베이스 락이란? Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다. 데이터베이스 트랜잭션과 격리성의 이해가 있어야 이해하기 쉬우실겁니다. Lock의 종류 공유(Shared) Lock 배타(Exclusive) Lock 이를 쉽게 말하면.. 공유락: Read Lock(읽기 락) 배타락: Write Lock(쓰기 락) 이라고 말합니다. 해당 글에서는 읽기 락과 쓰기 락이라고 표현하겠습니다. 읽기 락(i. e. 공유 락) 읽기 락은 자원을 읽을 때 사용됩니다. 읽기 락의 특징은 읽기 Lock끼리 하나의 자원을 읽을 때 여러 사용자(트랜잭션)가 동시에 접근할 수 있다는 것입니다. 쓰기 락(i. e. 배타 락) 쓰기 락은 데이터를 변경할 때 사용합니다. 트랜잭션이 완료될때까지 유지됩니다. 배 타락..

image