전체 글 416

[개발자의 자질] 존 카맥이 말하는 대체 불가능한 개발자가 되는 법

가장 존경하는 개발자를 물어본다면 존 카맥이라고 대답한다. 존 카맥의 영상을 자주 찾아보는 편이다. 너무 존경하는 개발자이기도 하고 세계적으로 인지도도 많아서 이 분의 말씀을 담은 자료들이 올라오는데 그때마다 꼭 챙겨본다. 이번에 꽤 좋은 자료가 올라왔는데 재밌게 볼 수 있는 영상이다. 해당 내용에 대한 간략한 요약과 개인적으로 느꼈던 점을 이야기해보고자 한다. 존 카맥은 어떤 사람일까? 본명 John D. Carmack은 이드 소프트웨어의 공동 창업자이자 기술 감독, 프로그래머이다. 1970년 8월 20일 미국 캔자스 출생이다. 1인칭 슈팅 게임 장르에서 전설적인 게임을 개발했다. 퀘이크콘 등 활발한 연설이나 인터뷰 활동을 펼쳤고 PC 게임 업계에서 스타 개발자이자 3D 그래픽 프로그래밍의 기술 Gur..

개발 팁 2023.04.29

[Tech] 인증과 인가에 대한 이해

인증, 인가에 대해서 간략하게 정리해보고자 한다. 내용이 꽤 많고 사용해본 지 시간이 꽤 흘러서 간단하게 정리해보겠다. 인증과 인가 시스템의 자원을 적절하고 유효한 사용자에게 전달하고 공개하는 방법이다. 인증은 Authentication 즉 로그인이다. 인가는 Authorization 즉 인증 작업 이후 행해지는 작업이다. 인증된 사용자에 대한 자원에 대한 접근 확인 절차를 의미한다. 유저는 관리자 페이지에 접속할 수 없다. 왜냐면 관리자 페이지에 인가되어 있지 않기 때문이다. 세션 기반 인증 세션 기반 인증은 쿠키와 세션과 관련된 내용이다. 세션 기반 인가는 사용자 인증 정보가 서버 세션 저장소에 저장된다. 사용자가 로그인하면 인증 정보를 서버 세션 저장소에 저장하고 사용자에게 저장된 세션 정보인 Se..

백엔드 2023.04.12

[Kotlin] 코틀린 기본기

최근 코틀린을 배워야할 일이 생겼다. 당장 쓸 건 아니지만 미리 알아둬야겠다는 생각이 들어서 간단하게 정리해보고자 한다. 코틀린은 Google I/O 2017에서 안드로이드의 공식언어로 채택되었다. 코틀린 장점 문법적으로 진보 서버 사이드 애플리케이션에 좋음 자바 완벽 호환 툴 지원 (Intellij) 러닝커브가 낫음 코틀린 지원 서버사이드 프레임워크 Spring Vert.x kotlinx.html 세미콜론 사용하지 않는다. val temp: int = 10 var temp = 15 val: 변할 수 없는 상수 (read only, 초기화해줘서 선언해야함) var: 일반적인 변수 fun sum(a: int, b: int): int { return a + b } 위 코드는 아래처럼 단순화 가능하다. fun..

Kotlin 2023.04.11

[Android] 간단한 Firebase push notification alarm 앱 만들기

최근 Firebase push notification을 테스트해볼 일이 생겨서 간단한 안드로이드 앱을 만든 뒤 해당 앱으로 정상적으로 push notification이 전달되는 지 확인해봐야할 일이 생겼다. 그냥 간단하게 만들고 싶어서 flutter 쪽을 살펴봤는데 (개인적인 견해이지만) flutter는 코드의 양이 생각보다 많다는 느낌이 들었다. 그리고 굉장히 익숙하지 않은 형태처럼 느껴졌다. 예시 코드를 찾아보다가 그냥 이럴 바에 kotlin이나 java로 안드로이드 앱을 간단하게 만드는 게 낫다고 생각했다. 순서는 간단하다. 아래 순서대로만 진행하면 된다. Firebase 콘솔에 접속해서 Firebase project를 만들어 준다. project내에서 Android app을 만들어주고 google..

[Airflow] Apache Airflow Test Case 작성하는 법

최근 Apache Airflow를 만질 일이 생겼다. 여러 Task 들을 작성하기는 했는데 테스트 코드를 어떻게 작성할 지에 대한 감도 잡히지 않았고 이걸 직접 다 돌려보는 풀테스트를 작성해야하나 긴가민가 했다. 그리고 짧은 조언을 받았는데 기본적인 테스트 코드들이 있었으면 좋겠다는 리뷰를 받았다. 그러니 앞으로는 테스트는 기본으로 가져가자는 마인드를 가져야겠다. 그래서 airflow 에 대해 간단한 Test Case를 작성하는 법을 알아보고자 한다. 우선 pytest를 사용할 것이기 때문에 pip install을 해주자. mock 테스트 안할 거면 후자는 빼줘도 되요~ pip3 install pytest pytest-mock 그리고 아래와 같은 dag와 task 들을 정의해줬다고 가정하자. from d..

[Convention] 협업 방식 정리(3) 애자일 + 스크럼 + 개발 프로세스 + 리더의 자질

신입 개발자로 일할 경우 사내에서 접하게 되는 개발 문화가 있다. 규모에 따라 다를 수 있겠지만 개발자로 일하는 경우 애자일 문화, 스프린트 방식, 코드 리뷰, 개발 프로세스에 대한 회사만의 특유한 문화를 접하게 된다. 그에 대한 간략한 내용을 정리하고자 한다. 스프린트 일일 스크럼 회의 짧게 회의한다. 15분 ~ 20분 정도, 팀원들이 보여서 어디까지 했고 어제 무얼 했으며 오늘 뭘 했고 어떤 점이 문제인지 이야기한다. 스프린트 원칙 스프린트 기간 중에 서비스의 우선 순위를 바꿔선 안된다. 요구 사항이 생기면 진행 중인 스프린트 내에서의 변경을 해서는 안된다. 스프린트도 갑자기 종료될 수 있는데 이때는 어찌할 수 없는 상황에서만 종료되어야 한다. 스프린트는 정해진 시간 안에 끝내고 연속적으로 진행되어야..

[Docker] OCI runtime exec failed: exec failed: unable to start container process: exec: "ping": executable file not found in $PATH: unknown

간만에 도커를 실습하는 와중에 아래와 같은 에러를 마주했다. OCI runtime exec failed: exec failed: unable to start container process: exec: "ping": executable file not found in $PATH: unknown 내가 하고자 하는 명령어는 아래와 같았다. docker exec mysql ping findby docker exec findby ping mysql 즉 findby라는 컨테이너와 mysql이라는 컨테이너 사이에서 서로에게 핑을 보냄으로써 정상적으로 컨테이너가 살아있는 지 확인하기 위함이었다. 물론 당연히 떴으니 살아있겠지만 그냥 확인차 ping은 잘 날라가는 지 보고 싶었다. 근데 왜 위 오류가 발생했을까? 위 ..

[Docker] 협업 방식 정리(2) 가상화 + docker + dockerfile + docker compose + docker network + dockerhub

오늘은 docker, dockerfile, docker compose, docker network에 대해서 알아보기로 한다. 협업에서 혹은 신입 개발자로 일하게 된다면 반드시 docker 혹은 가상화 기술에 대해 알고 있어야 한다. 그냥 업무 숙달의 일환이라고 생각하고 간단하게 살펴보자. 도커 공식문서: https://docs.docker.com/get-started/overview/ 가상화 기술이란? https://velog.io/@palza4dev/Docker%EC%99%80-%EA%B0%80%EC%83%81%ED%99%94-%EA%B8%B0%EC%88%A0 https://spidyweb.tistory.com/71 https://nomad-programmer.tistory.com/282 가상화는 물리..

[Git] 협업 방식 정리(1) git + gitflow + gitlab + 코드 리뷰 + code convention + PR Request + Merge Request + 개발 문화

협업을 제대로 해본 적이 없어서 협업 방식에 대해서 정리하고자 한다. 코드 리뷰도 제대로 해본 적이 없어서 협업 컨벤션이나 구체적인 루틴에 대한 이해가 필요할 것 같다. 간단하게 정리하고자 한다. https://backlog.com/git-tutorial/kr/ git 기본 명령어 정리 https://wecandev.tistory.com/152 인덱스(index): 커밋할 변경사항을 모아놓은 궁간임. 작업 폴더(work Tree)의 변경내용을 인덱스에 기록하는 것을 스테이지(Stage)라고 한다. 머지(Merge): 선택한 브랜치에 다른 브랜치에서 커밋한 내용을 병합하는 동작임. 컨플릭트(Conflict):동시에 같은 파일의 유사한 부분을 수정한 경우 발생하는 코드충돌을 의미하고 의도에 맞는 코드를 선택..

[백엔드 스터디] 7, 8주차 - JPA 연관관계 및 영속성 전이

이번주 주제는 JPA 연관관계 매핑과 영속성 전이입니다. 주제가 비교적 큰 범위로 선정되어 이번 7, 8주차를 기준으로 마무리된다. JPA에서는 아래 세 가지가 중요하다. 방향: 단방향, 양방향 (객체 참조) 연관 관계의 주인: 양방향일 때, 연관 관계에서의 관리의 주체 다중성: 다대일(N:1), 일대다(1:N), 다대다(N:N) 데이터베이스 테이블은 외래 키 하나로 양 쪽 테이블 조인이 가능함. 그러나 객체의 세계는 참조용 필드가 있는 객체만 다른 객체를 참조 가능함. 기본적으로 단방향 매핑으로 하고 나중에 꼭 필요할 때만 양방향을 추가해주면 된다. 연관 관계의 주인을 정하는 건 무엇일까? 두 단방향 관계 즉 (a -> b, b -> a) 에 대해서 제어의 권한 즉 외래 키를 비롯한 테이블 레코드를 저..

[CS스터디] CS스터디 방식 소개

CS 스터디 진행 방식에 설명드리겠습니다. 매주 토요일 13시에 시작하고 컴퓨터 네트워크 Chapter 1 컴퓨터와 네트워크 인터넷 1.1 인터넷이란 무엇인가? 1.2 네트워크의 가장자리 1.3 네트워크 코어 1.4 패킷 교환 네트워크에서의 지연, 손실과 처리율 1.5 프로토콜 계층과 서비스 모델 1.6 공격받는 네트워크 1.7 컴퓨터 네트워킹과 인터넷의 역사 1.8 요약 Chapter 2 애플리케이션 계층 2.1 네트워크 애플리케이션의 원리 2.2 웹과 HTTP 2.3 인터넷 전자메일 2.4 DNS: 인터넷의 디렉터리 서비스 2.5 P2P 파일 분배 2.6 비디오 스트리밍과 콘텐츠 분배 네트워크 2.7 소켓 프로그래밍: 네트워크 애플리케이션 생성 2.8 요약 Chapter 3 트랜스포트 계층 3.1 트..

[Computer Graphics] 3D 게임 프로그래밍 후기 with TheCherno

2022년에는 특히나 그래픽스 프로그래밍에 대해 관심갖고 지냈다. 특히 언리얼5 출시와 함께 많은 프로젝트가 발표되었는데 상당히 인상깊은 프로젝트들이 많았다. 국내에서 가장 유명했던 프로젝트를 꼽으라면 당연히 러셀 님이 진행하고 계신 Project RYU가 될 수 있겠다. 그 영상을 보고 정말 감명받았고 배우고 싶다는 생각이 들었다. 아래 프로젝트 RYU 영상을 링크로 걸어뒀다. 꽤나 긴 영상이지만 시간이 남는다면 꼭 보기 바란다. 언리얼로 이정도 수준까지 구현할 수 있다는 점이 정말 놀랍다. Project RYU 개인적으로 아쉬웠던 점은 우리 컴퓨터공학 학부는 그래픽스 강좌가 현재는 열리지 않는 상태이기 때문에 어떻게든 혼자서 공부하는 수밖에 없었다. 아마 강좌가 있었다면 해당 강좌를 수강하고 어떤 식..

[백엔드 스터디] 6주차 - JPA 영속성 컨텍스트

안녕하세요. 이번 6주차에는 JPA 영속성 컨텍스트에 대한 스터디를 진행하고자 합니다. 지난 주차와 마찬가지로 단순 단답 위주의 질문 보다는 서술이 가능한 질문 위주로 연습하도록 합니다. 영속성 컨텍스트란? 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해서 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. em.persist(object) 는 엔티티 매니저를 사용해서 object 엔티티를 영속성 컨텍스트에 저장한다는 의미이다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하..

[백엔드 스터디] 5주차 - ORM과 JPA의 추상화 계층 그리고 특징들

이번 5주차에서는 본격적으로 JPA를 공부하기에 앞서서 ORM 그리고 JPA는 무엇이며 이러한 것들이 필요한 이유에 대해서 알아보는 시간을 가지고자 한다. 이번 주는 간단한 답변보다는 서술할 수 있는 수준에 초점을 맞추고자 합니다. 주제에 앞서 먼저 ORM와 JPA의 기본인 영속성에 대해 짚고 넘어가고자 합니다. Persistence Persistence란 무엇인가? Persistence 즉 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말합니다. 영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 잃어버리게 됩니다. 즉 휘발성이 있습니다. Object Persistence인 영구적인 객체는 무엇일까요? 메모리 상의 데이터를 파일 시스..

[Test] Intellij에서 테스트 시 No tests found for given includes: 에러 발생

인텔리제이에서 테스트 빌드 중 아래와 같은 에러를 만났다. No tests found for given includes: 환경 상의 문제인 것 같은데 해결 방법은 간단하다. 인텔리제이 settings에 들어가서 gradle로 이동한다. 해당 설정 창에서 .Run tests using: 을 Intellij IDEA로 바꿔주면 작동한다. 출처는 아래와 같다. 감사합니다. https://ddasi-live.tistory.com/35 Intellij JUnit Test 실패 No tests found for given includes Intellij 에서 JUnit Test 할때에 아래와 같이 에러가 발생하였다. No tests found for given includes: filter.includeTestsM..

개발 팁 2023.01.30

[Gradle] gradle 빌드 중 error: unmappable character (0xED) for encoding x-windows-949 발생

터미널에서 gradlew build를 통해 빌드를 하던 도중 다음과 같은 에러를 만날 수 있다. error: unmappable character (0xED) for encoding x-windows-949 인코딩이 깨지는 현상인데 이건 Intellij에서 빌드를 통해 jar파일을 얻으려고 한 경우에는 해결방법이 이미 많이 나와있다. settings에서 빌드 옵션이 gradle인지 intellij로 되어있는지 확인해서 변경하면 되는 문제라서 인터넷에 잠깐만 검색해도 방법이 많이 나와있다. 다만 터미널에서 빌드를 하려고 하는 경우 어떻게 이 문제를 해결할 수 있을까? 지금까지 봤던 해결방법 중 가장 간단하고 효과적인 방법을 찾았다. build.gradle 파일에 아래와 설정을 적어준다. 이후 터미널에서 g..

개발 팁 2023.01.29

[백엔드 스터디] 4주차 - 컴포넌트 스캔 그리고 의존관계 자동 주입

이번 4주차 주제는 컴포넌트 스캔 그리고 의존관계 자동 주입이다. 컴포넌트 스캔이란? 스프링 빈을 등록할 때 구성파일에 @Bean을 등록해서 사용할 수 있었다. 하지만 관리할 빈이 많아지면 이 방식이 관리하기 번거로워진다. 그래서 굳이 빈 설정파일을 만들지 않거나 @Bean을 안쓰고 빈 등록을 할 수 있는 방식을 쓰게 되었다. 그게 @Component를 써서 컴포넌트 스캔을 하는 방식이다. 설정파일이 없다면 의존관계를 어떻게 주입할까? @Autowired를 사용해서 자동 의존관계 주입을 한다. 자동 의존관계 주입은 아래서 살펴본다. 컴포넌트 스캔이란 스프링이 스프링 빈으로 등록될 준비가 된 클래스들을 스캔해서 빈으로 등록해주는 과정을 말한다. @Component 어노테이션이 붙어있는 클래스들은 모두 컴포..

[UnrealEngine5] Unreal Engine5로 제작한 첫 시네마틱 영상

이번주에 시간이 남아서 언리얼5를 만져봤다. 예전에 한번 잠깐 배워본 적이 있었는데 거의 기억에 남아있지 않아서 이번에 좋은 학습 영상을 추천받아서 새롭게 살펴보았다. 그리고 학습 영상을 통해 하나의 시네마틱 영상을 제작해보았다. 카메라 움직임과 빛의 세기 등을 조절해서 첫 영화를 만들었다. 재밌게 배웠고 정말 뛰어난 툴이라는 생각이 든다. 아래 영상을 첨부한다. 4K라서 영상의 용량이 꽤나 크다. 그래서 카톡으로 다른 사람들에게 자랑하고 싶었지만 못했다. (카톡 전송용량을 초과해버려서 그렇다. 그래서 여기 올려서 링크로 보내줄거다.ㅎ) 조금 어설프지만 그래도 처음 만든 것 치곤 잘 만들었다.

Unreal Engine 2023.01.19

[Computer Graphics] 출력문이 렌더링 속도에 미치는 영향

오늘 시간이 남아서 평소 관심있던 컴퓨터 그래픽스를 살펴보고 있었다. 자바로 3D 오브젝트를 구현하는 내용을 공부 중이었는데 정말 흥미로운 문제를 만났다. 화면에 랜덤으로 색을 입힌 256 x 256 사이즈의 정사각형을 그려내고 해당 정사각형을 지속적으로 움직이도록 했는데 그려내는 속도가 연산 속도를 따라가질 못했다. 한마디로 화면에 그려내는 속도가 너무 느렸다. 아래 영상을 보면 무슨 말인지 알 것이다. 아래 영상을 보면 얼마나 느린지 체감이 될 것이다. (원래는 계속 이어지면서 그려야 한다는 걸 감안하면 뭔가 문제가 있다는 걸 알 수 있다. ) 그래서 추측을 해보게 되었다. 모니터에 그려내는 동작은 IO 작업이 굉장히 많이 일어나는 작업인데 분명 이 과정 어딘가에 병목이 있다고 생각했다. 어떻게 해결..

반응형