개발 정보 51

[Dev] 질문에 대한 이야기

최근 질문을 하는 방법에 대한 고민을 하는 중이다. 어떤 질문이 좋은 질문일까. 무례하지 않으면서도 내가 원하는 걸 얻을 수 있는 질문 말이다. 요즘 그걸 고민 중이다. 포프님께서 질문에 대한 영상을 찍은 게 있어서 해당 내용과 내 개인적인 생각을 간추려봤다. 포프님: 너무 넓은 범위의 질문을 하는 건 지양하는 게 좋다. 가장 중요한건 이해가 안되는 포인트 하나를 이야기하는 것이다. 그렇게 하면 상대방이 더 구체적인 내용에 대해 이야기해줄 수 있다. 뜬금없이 질문할 때 보통 상대방은 다른 일을 하고 있는 상황이다. 의미없이 질문했다고 하더라도 상대방은 왜 내가 그런 질문을 했는지를 이해 못할 수 있다. 그래서 정확히 뭘 물어보는 지 몰라서 상대방이 시간을 많이 쓸 수도 있다. 상대방이 yes or no ..

개발 정보 2023.06.06

[Tech] Cache invalidation이란 무엇일까?

오늘 인스타그램의 Scailing 아키텍쳐에 관한 영상을 보았다. 내용이 정말 좋다고 생각했는데 자주 등장하는 용어 중 낯선 용어가 있어 이에 대해 정리해보고자 한다. Cache invalidation 즉 캐쉬 무효화이다. 찾아보니 꽤나 도움되는 내용이 많은 개념이다. 왜 캐시가 등장했을까? 기술 발전으로 프로세스 속도는 증가했지만 메모리 속도가 이를 따라가지 못했다. 프로세서가 아무리 빨라도 메모리 처리 속도가 느리면 결과적으로 전체 시스템 속도가 느려진다. 이를 개선하기 위해 캐시가 나왔다. 캐시는 CPU 칩 안에 들어가는 작고 빠르고 비싼 메모리다. 프로세서가 매번 메인 메모리에 접근해서 데이터를 받아오면 시간이 오래 걸려서 자주 사용하는 데이터를 담아두고 해당 데이터가 필요할때 프로세스가 메인 메..

개발 정보 2023.05.05

[개발자의 자질] CTO의 역할

최근 EO에 올라온 영상 중 CTO에 관한 영상이 있었다. 꽤 재밌게 봤다. 문득 CTO는 어떤 일을 하는 사람인지 궁금해졌다. 기술 조직의 최고기술책임자는 어떤 일을 할까? CTO 공석인 스타트업들이 많다. 책임회피라고 볼 수 도 있다. 고객에게 진짜 가치를 줄 수 있다면 매출은 당연히 따라온다. Chief Technical Officer란 무엇일까? 기술 팀을 관리하고 회사의 전략과 기술의 전략이 잘 어울리도록 노력하는 사람이다. 회사와 기술팀이 성장함에 따라서 CTO의 역할도 함께 변해야 한다. 그렇지 않다면 서비스와 기술은 성장 정체기를 맞는다. 스타트업의 단계는 아래와 같다. 1. 암흑기 2. 성장기 3. 기술의 르네상스 4. 성숙기 암흑기 기술팀 규모 0~5명 재무적으로 어렵고 불확실성이 큰 ..

개발 정보 2023.04.30

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

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

개발 정보 2023.04.29

[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

[Tech] DDD - 도메인 주도 설계란?

최근 여유가 생겨 라는 책을 읽고 있다. 흥미로운 개념들이 많이 나와서 재밌게 읽고 있는데 DDD에 대한 개념이 많이 등장한다. DDD에 대한 개념은 이전부터 알고 있었지만 추상적인 개념이라고 명확하게 이해하진 못한 것 같다. 개인적으로 어떤 개념이든 이런 수준의 높은 추상적인 개념, 방법론, 패턴, 철학 등은 본인이 직접 써보거나 신중하게 장단점을 판단하지 않은 이상 무턱대고 쓰지 말아야한다고 생각한다. 그래서 이번에 시간을 갖고 DDD 관련 자료를 여러 개 탐색해보고 그 내용을 정리해보고자 한다. 도메인이란? 소프트웨어로 해결하고자 하는 문제 영역이다. 즉 비즈니스 영역이다. 도메인 주도 설계란? 도메인을 중심으로 하는 개발방식이다. 도메인에 관련된 문제를 해결하는게 핵심이다. 복잡한 도메인을 해결하..

개발 정보 2023.01.06

[Tech] CORS 란? - Cross origin resource sharing

주말이라 블로그를 탐방하면서 백엔드 관련 기술 질문을 보고 있었는데 CORS에 대한 정확한 개념을 알고 있는지 의문이 들었다. CORS가 다른 도메인의 자원을 요청했을때 거부 당하는 개념이라고 알고 있는데 추가적인 내용은 알지 못했다. 다행히도 우테코에 CORS에 대한 굉장히 좋은 자료가 올라와있었다. 관련 자료들을 보고 요약하고 정리한 내용을 간단하게 써보고자 한다. Origin이란? url의 Protocol, Host, Port를 통해서 같은 출처인지 판단할 수 있다. SOP란? same origin policy의 약어이다. 다른 출처의 리소스를 사용하는 것에 제한하는 보안 방식이다. 왜 SOP을 사용해야 할까? 해커가 링크를 담은 메일을 보낸다. 클릭을 한 곳에 가면 해커가 만든 주소로 간다. 이때..

개발 정보 2023.01.01

[Tech] WAS와 웹서버의 차이

웹 서버는 클라이언트가 브라우저에서 어떤 페이지 요청을 하면 웹 서버에서 그 요청을 받아서 정적 컨텐츠를 제공하는 서버이다. 정적 컨텐츠는 주로 HTML, CSS, Javascript, 이미지 등을 말한다. 웹 서버 종류: Apache, Nginx, IIS WAS 는 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. WAS 종류: Tomcat, JBoss 웹 서버는 정적 컨텐츠만 처리하도록 기능 분배를 해서 서버 부담을 줄인다. WAS 를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때마다 결과를 제공하면서 자원을 효율적으로 사용할 수 있다. 만약 WAS 가 정적 컨텐츠 요청까지 처리하면, 부하가 커지고 동적 컨텐츠 처리가..

개발 정보 2022.11.12

[Dev] 대용량 파일 전송에 UDP가 적합하지 않은 이유

최근에 파일 공유 서비스를 만들고 있는데 클라이언트 단에서 파일을 암호화한 뒤 그 CipherText를 다른 Client에게 전송하는 기능을 구현할 일이 생겼다.  물론 CipherText자체가 꽤나 짧은 String이라서 전송하는 Data의 사이즈가 문제되진 않을 것이라고 생각했다. 하지만 추후에 대용량 파일 전송도 염두에 두고 있었기 때문에 TCP와 UDP 중 어느 것을 쓸지 고민하고 있었다. 물론 TCP를 당연히 써야겠다고 생각했지만 UDP를 쓸 순 없을까 고민하고 있었다. 물론 File 전송은 비디오나 오디오가 아니기 때문에 전송에 있어서 확실한 보장이 필요하다. 그래서 대충은 결국은 TCP를 써야겠다고 생각하고 있었다. 실제로 TCP의 예로써 File전송이 언급되곤 한다. 하지만 개인적인 취향인..

개발 정보 2022.10.24

[SW] SOLID 원칙이란 무엇인가?

SOLID 원칙이란 무엇인가? SRP (Single responsibility principle): 단일 책임 원칙이다. 즉 클래스는 하나의 책임만 가져야 한다는 뜻이다. OCP (Open/closed principle): 개방-폐쇄 원칙이다. 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다는 뜻이다. LSP (Liskov substitution principle): 리스코프 치환 원칙으로 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다는 뜻이다. ISP (Interface segregation principle): 인터페이스 분리 원칙이다. 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다는 뜻이다. DIP ..

개발 정보 2022.09.18

[Dev] 10월 4일 페이스북 대규모 장애 원인 간단 정리

2020년 10월 4일 페이스북은 물론이고 인스타그램, 왓츠앱 모두가 한꺼번에 접속되지 않는 문제가 발생했다고 한다.  장애 원인은 간단하게 정리할 수 있었다.  페이스북의 라우트가 라우터에서 즉 쉽게 말해 네트워크 상에서 없어졌기 때문이다. 즉 페이스북으로 무언가를 보내는 길 자체가 사라졌기 때문에 전 세계 어느 곳에서도 페이스북을 이용할 수 없게 된 것이다.  기업이 커지게 되면 하나의 작은 망을 구축해서 쓰게 되는데 페이스북도 마찬가지로 모든 서버들이 하나의 단일 지점을 기준으로 외부와 소통하고 있던 상태였다. 그런데 이 연결지점인 라우터가 자신이 facebook이라는 것을 외부로 알려주는 것을 중단했기 때문에 발생한 문제이다.  내부 개발자가 실수로 설정 정보에 라우터의 정보를 삭제하는 설정까지 ..

개발 정보 2022.07.29

[Dev] HTTP에서 PUT과 PATCH의 차이

HTTP요청에서 PUT과 PATCH라는게 존재하는 것을 알고 있었는데 여태 둘이 같은 기능을 한다고 오해하고 있었다.  그러다가 Django를 학습하던 중 이 두가지를 구분해서 사용하는 예제를 보았고 분명 차이가 있다고 생각해서 오늘 찾아보았다.(생각보다 중요한 차이였다. 계속 모르고 있었다면 위험했다.) 우선 둘다 update를 한다는 점에서는 같다.  특정 객체를 디비에 밀어넣을때 내가 전달한 값으로 업데이트를 해서 넣는다는 점에서는 같다.  하지만 이 동작에서의 미묘한 차이가 있다.  PUT의 경우에는 업데이트를 할때 모든 값을 업데이트한다. 즉 모든 필드에 대해서 업데이트를 진행한다는 얘기다.  PATCH는 내가 전달한 값에 대해서만 업데이트한다. 전달한 필드에 대해서만 업데이트를 진행한다.  즉..

개발 정보 2022.07.15

[CS] Gbps 와 GBps 의 차이

계산문제를 풀 일이 있어서 이것저것 풀어보는 중이었는데 도무지 안풀리는 문제에서 막혀서 거진 30분은 소비했다. 자꾸 말도 안되는 숫자가 나와서 뭔가 이상하다는 낌새를 느꼈다. 보통 숫자들은 딱 들어맞는데 계산결과가 틀어지는 이유는 십중팔구 단위에 있다고 생각했다. 내가 단위에 대해서 뭔가 실수했거나 단위 변환에 있어서 숫자를 틀렸거나 아니면 애초에 단위 변환 과정 자체에 오해가 있다는 생각을 하게 되었다. 그리고 이러한 고민들이 맞았다는 것을 곧 알게 되었다. Gbps 와 GBps 를 보자면 슬쩍 보면 정말 비슷하다. 별생각없이 그냥 풀면 틀리기 쉽다. Gbps 는 gigabit per second 이다. GBps 는 gigabyte per second 이다. 완전히 다른 내용이다. 아래 그림을 참고해..

개발 정보 2022.04.21

[Dev] 개발자 커리어 팁

요즘 개발자 커리어에 대한 이야기가 많다.  관련해서 유튜브에 재밌는 영상이 하나 올라와서 적어본다. 모든 내용을 공감하진 않는데 그냥 재밌는 내용이다. 1. 트위터 만들기 -> 프로필 꾸민다. 어떤 기술 공부중인지. 뭐하는 사람인지!  -> 좋아하는 기술자 팔로우하고 코드 팁같은거 공유하기! 질문을 하던! 재밌는 밈을 올리던!!  2. 링크드인 사용 !  3. 깃허브잔디심으세요... 오픈소스 컨트리뷰션 해보기..  4. 포토폴리오!하나쯤은 멋있는 앱을 만들어봐라!  -> 괘 어려운걸로 3주 잡고 제대로 해봐라.  5. 블로그 운영해라! 근데 내 고유의 커스텀 으로 하는게좋다  6. 사람 직접 만나기!  7. 멘토를 갖는 것은 정말 중요하다. 나보다 먼저 업계에 진입한 사람!  8. 될때까지 계속 구직해..

개발 정보 2022.02.12

[Dev] 백엔드 개발자 로드맵(공통)

1. 백엔드 언어 택12. 프레임워크 택13. 데이터베이스 택1 4. jwt, 토큰, Oauth 5. 캐싱 - redis, memcached6. 메시지큐 - 카프카, rabbitMQ 7. 버전 컨트롤 - git8. 배포 - AWS, GCP , Firebase, Heroku  근데 사실 언어는 크게 상관없는것 같다. 완전 비탈길을 내려가는 언어가 아닌 이상 어떤 언어든 배워서 써먹을 수 있으면 그만이고 프레임워크도 마찬가지라고 생각한다. 그리고 위의 내용들보다 더 중요한건 영어다.영어가 가장 중요하다. 구할 수 있는 양질의 자료들의 99.9퍼센트가 영어로 되있다고 생각한다. 영어가 진짜 중요하다.  영어에 문제가 없다면... 노트북 한대만 있으면 된다.

개발 정보 2022.01.25

[Intellij] Intellij에서 삭제했던 파일 혹은 코드 복구하는 방법

인텔리제이에 있는 흥미로운 기능을 발견했다. 이전에 삭제했던 파일이나 코드를 복구할 수 있는 기능이다. 예를 들어 아래와 같은 resources 폴더에서 log4j2.xml 을 삭제했는데 다시 필요한 경우가 있다고 가정하자. 깃에도 없고(?) 뭐 아무튼 아무튼 증발해버렸다면? 위의 resources 폴더에 마우스 우클릭을 한다. 그러면 위와 같이 Local History라는 메뉴가 뜰 것이다. 해당 Local History를 클릭하면 아래와 같은 화면이 나오면서 변경된 사항을 확인할 수도 있고 이전에 있었던 코드를 긁어올 수도 있다. 덕분에 살았다... 사실 진짜 실수로 지워서 복구할 필요가 있었다. 근데 그냥 CTRL + Z 누르면 되려나? 나중에 테스트해봅시다.

개발 정보 2022.01.25

[Dev] 프로젝트속에서 발견한 것

요즘 백엔드 프로젝트를 진행하면서 꽤나 코딩에 열중하며 지내고 있다. 정말 많은 것들을 배운 시간이라는 생각이 들었다. 거의 마무리가 되었고(?) 이제 최종적으로 어느정도 테스트를 거치고 ec2에 배포하면 끝이다. 물론 이후에도 수정해야할 사항들이 많다. 다만 최소한의 핵심기능들이 돌아가게끔이라도 만들어놓고 이후에 추가적으로 코드를 리팩토링하고 추가 요구사항들을 추가할 일이 남아있다. 사실 완성본이라기 보다는 프로토타입에 가깝다. 후순위로 미뤄둔 기능들은 아직 구현도 하지 않았기 때문이다. 애초에 팀의 목표 자체가 빠른 출시였기 때문에 사실 다른 무엇보다도 빠르게 개발해서 일단 결과물을 만들어낸다는 점에 우선순위를 두었다.  이렇게 코딩에 열중한게 정말 오랜만이라는 생각이 들었다. 그러면서 문득 내가 지..

개발 정보 2022.01.19
반응형