일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- JWT
- Signature
- CMC
- 해커톤
- HashCode
- 딕셔너리
- 동등성
- Hackathon
- ssh-action
- github action
- forloop
- 컴공선배
- object
- 동일성
- CICD
- remove
- 동빈북
- 우테코
- equlas
- loop
- 라이징캠프
- 이것이취업을위한코딩테스트다
- Payload
- 왕실의나이트
- 너디너리
- 나동빈
- nestJS
- makeus
- 이코테
- 우아한테크코스
- Today
- Total
목록분류 전체보기 (38)
iamjooon2님의 블로그

처음 우테코 자동차 미션을 시작할 때, 역할, 책임 협력... 다른 크루들이 하는 말을 정말 하나도 이해하지 못했다. 급하게 오브젝트를 구매했는데, 책 두께를 보니 막막해서... 객체지향의 사실과 오해를 구매했다. 레벨 1 도중 허겁지겁 키워드 위주로 머리에 쑤셔넣은채로 읽어서, 레벨 2 시작전 여유롭게 정독해보았다 조금은 추상적일 수도 있는 내용이었지만 이상한 나라의 앨리스, 커피공화국, 영화관의 예제들과 우아한테크코스 미션에 대입해보는 과정에서 "아~ 이게 그 뜻이었구나" 라고 뒤늦게 이해되는 것들이 많았다. 읽을 때 마다 새로운 책이지 않을까 싶다 밑줄 친 문장들 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 객체지향에서는 데이터와 프로세스를 객체라는 하나..
우테코 레벨로그에 중 디미테르의 법칙을 적어 냈다 저문이 계속해서 압박면접을 해주셔서 끝내 GG를 쳤는데.. 집에 돌아오고 나서, 내 고민이 깊지 못했다는 생각이 들었다. 방학을 맞아 내 언어로 내 고민과 생각을 다시 정리해보려 한다. 돌이켜 생각해보면, 디미테르의 법칙을 처음 알게 된 것은 사다리 미션을 진행하면서였다 당시 내가 작성한 코드는 다음과 같다 public class Ladder { .... public Map calculateResult(final Names names, final Prizes prizes) { Map totalResult = new HashMap(); for (int position = 0; position < names.size(); position++) { totalR..

우테코에서 문자열 덧셈에 대해 확인하는 수업이 있었다기존 자동차 경주 코드리뷰에서 String, StringBuilder, StringBuffer에 대해 공부하라는 코멘트도 있어서성능 차이에 대해서 고민해 볼 수 있는 시간이 이미 있었다. String- 불변이라 객체 생성 후 상태 변경이 불가능 하다- String과 String을 더할 경우, 새로운 String을 만든다-> 즉, 더하는 시점에 메모리 할당 및 해제가 반복되어 단위가 클 경우 성능 이슈 가능성이 있음 StringBuilder- 기존 데이터에 새 데이터를 계속 더하는 방식(append)으로, 속도가 훨씬 빠르다- 멀티쓰레드 환경 보장하지 않음 StringBuffer- 멀티 쓰레드 상황에서 안전함- 그만큼 여러 쓰레드에서 접근시 Lock이 ..
Java의 final은 크게 변수, 메서드, 클래스에 붙여줄 수 있는 키워드이다 이 final이 붙은 대상은, 재할당이 불가능하다 (불변을 의미하진 않는다) final은 변수에서 다음과 같이 사용할 수 있다 예시는 자동차 경주 게임이다. public class Car { private static final THROTTLE = 4; // 상수에 사용 private final String owner; // 재할당 불가 private int position; // 재할당 가능 public Car(final String name) { // 파라미터에도 붙일 수 있음 this.owner = name; this.position = 0; } public void move(final int power) { if (p..
캐싱은 반복적으로 사용되는 데이터를 미리 저장해두는 것을 말한다. 갑자기 분위기 캐싱? 블랙잭 미션을 하면서 캐싱과 관련된 리뷰를 보았다. 이 블랙잭에서 사용되는 카드의 개수는 52개로 이미 정해져있다. 게임이 한 번 실행된다면 상관 없지만, 여러번 게임이 진행된다면 카드뭉치를 그때마다 새로 생성해야되니, 캐시로 성능상 이점을 가질 수 있지 않겠냐는 말이었다. 내 리뷰는 아니었지만, 해당 리뷰를 받은 코드와 내 코드가 별반 다를 게 없기에, 캐싱을 적용해보았다. 내 기존 코드는 다음과 같다. public class Deck { private final List cards; ... public static Deck create() { List initialCards = generateCards(); Co..
제네릭 미션하는데 하루를 넘게 쓴 나를 위해 정리한다.... 제네릭? - JDK 1.5부터 도입된, 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. - 컴파일 타임에 타입을 체크함으로써 코드에 안정성을 높여준다 왜 쓰는걸까? 컴파일 타임에 타입 검사가 가능하기 때문이다 // 제네릭 미사용시 List names = new ArrayList(); names.add("gavi"); names.add(1); String result = (String) names.get(0) * (String) names.get(1); // Runtime Error // 제네릭 사용시 List names = new ArrayList(); names.add("gavi"); names.add(1); // Compi..
우아한테크코스에서 페어프로그래밍을 진행하며 얻을 수 있는 큰 장점은 페어의 지식을 흡수할 수 있다는 것과, 다양한 코드 스타일을 알 수 있다는 것이다. 또한 내가 무의식적으로 사용하던 것들을 설명할 수 있어야 하는데 이 과정에서 내가 알고 있는 것이 진짜 알고 있는 것이 아니라는 것 역시 알게 된다. 방어적 복사에 대해 알게 된 것도 이 페어프로그래밍 덕분이다 무의식적으로 getter를 자동완성으로 만들었는데, 페어가 '방어적 복사로 감싸서 보내자!'고 의견을 냈다 그리고 난 대답하지 못했다.... 그래서 방어적 복사는 뭘까? 코드와 함께 보자 public class Player { private final String name; private List cards; public Player(String ..
우아한테크코스 적응하는데 시간이 꽤 걸렸다 어느정도 적응했으니, 그동안 기술부채로 남겨둔 궁금한 것들을 시간나는대로 모두 정리할 것이다 이 블로그는 흔하디 흔한 개발자 이력서에 적을 보여주기식 블로그가 아닌 내가 다시 보고 싶어서, 내 멋대로 정리하고 적는 글들의 집합이다 잘 알아서 적는 것이 아닌, 잘 알고싶어서 쓰는 글들이다. 아무도 안보겠지만, 혹시 틀린 것이 있다면 지적해주시면 감사하겠습니다. 모든 원시값을 포장하라 우아한테크코스에서 강조하는 객체지향 생활체조 9가지 중 하나이다 저 요구사항을 만족시키기 위해 포장한 VO를 볼 때마다, 항상 equals, hashcode가 재정의 되어있었다 그리고 이에 대해 찾아보면 동일성과 동등성이라는 키워드가 꼭 하나씩 붙어있다 이건 대체 뭘까? 이름이라는 S..

이전 프로젝트에서 배포를 담당했다. main 브랜치에 팀원들의 개발 내역이 머지되면, EC2에서 브랜치를 pull 하는 방식으로 배포를 진행했는데, 이 과정이 정말 너무나도 번거로웠다. 그래서 다음 프로젝트에서는 꼭 자동 배포 파이프라인을 구축해야지 마음먹었다. 이번 프로젝트에서 적용했고, 그 대략적인 과정을 정리해보려고 한다 내가 구축한 프로세스는 다음과 같다 1. 로컬 컴퓨터에서 깃허브의 저장소로 push했을 때 2. 깃허브 액션이 실행된다 3. 깃허브 액션에서 EC2에 ssh 접속을 한 후, 4. 작성해둔 스크립트를 실행한다 - 스크립트 내용 4-1. 저장소를 클론해놓은 경로로 이동한 후 4-2. 지정한 branch를 git pull 한다 (업데이트 내역 반영) 4-3. 현재 실행중인 서버를 잠시 ..
CORS란? MDN의 정의 CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는, 추가 HTTP 헤더를 사용하여 한 URL에서 실행 중인 웹 App이 다른 URL의 선택된 resource에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다 죽어도 양반은 못되나보다. 교과서스러운 정의가 맘에 안든다.... 내 블로그니까 내 맘대로 정리한다 CORS는 왜 존재하는가? 브라우저(프론트)가 약속돼있던 서버가 아닌 다른 서버는 믿지 못하기 때문 내가 iamjooon2.com의 호스트일때, 브라우저 입장에서 개발하고 있는 사이트 외에 다른 수상한 웹이다.. (실제로 예전같은 경우, 다른 웹에서 자원을 떙겨쓸 일이 매우 적었다고 함) 하지만 웹이 발달하며, 여러 웹끼..