전체 글 49

[항해99] 4주차 WIL

1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제)이번주차는 설계를 진행했기 때문에 프로젝트를 하면서 부딪힌 기술적인 문제는 없으나멘토링과 리뷰를 통해서 얻은 키워드들은 있다.보상 트랜젝션api가 실패했다면 어떻게 다시 실행을 해야 하는가? -> spring batch, spring-retry주문시 pay, product 등 여러 도메인에 수정이 들어갈텐데, order를 제일 먼저 작업하는 이유: 트랜젝션 ID를 따기 위함.=> 결제 중간에 실패하거나, 뭐 알수 없는 이유로 실패하면? 어? 어느 작업중이었지? 를 판단하는 기준.api 응답코드. 422 코드는 처음 봤다.Optional과 throw Error. Optional의 안티패턴.비즈니스로직에서 매번 같은 if (data == nul..

카테고리 없음 2024.10.12

WIL - 항해 1주차 회고

1. 문제 (과제, 프로젝트를 진행하면서 부딪혔던 기술적인 문제)포인트 추가와 히스토리 추가 단위테스트 진행중 한 테스트 로직에서 여러 의존성이 생겼음2. 시도포인트 추가 기능의 내부를 간략하게 살펴보면 아래처럼 구현되어있음.Point charge(id, amount){ pointRepository.getPoint(id); pointRepository.insert(id,amount); pointHistoryRepository.insert(id, amount, "CHARGE");}포인트 추가/삭제 로그가 잘 쌓였는지 테스트하는 단위테스트를 작성하는데 문제가 발생했음.포인트가 잘 쌓였는지 확인하려면 charge, use 함수를 사용해야 함. 포인트 히스토리 자체와 charge, use가 관계..

카테고리 없음 2024.09.28

C++ 반복문을 이용해서 코드 줄이기

개요 next라는 변수의 값만 바뀌고, 나머지는 동일한 내용이 반복되는 코드였다. next = {cur+1, cur-1, cur+cur}로 선언하여 간결하게 코드를 작성할 수 있다. 예시 기존 코드 while(!q.empty()){ int cur = q.front(); q.pop(); int next = cur+1; if(next =0){ if(dist[next]==-1){ q.push(next); dist[next] = dist[cur]+1; } } next = cur+cur; if(next < MAX){ if(dist[next]==-1){ q.push(next); dist[next] = dist[cur]+1; } } } 개선한 코드 while(!q.empty()){ int cur = q.front()..

Study/C,C++ 2020.09.11

이상하고 아름다운 자바스크립트

1. 문자열에 연산자 처리 예상) 문자열이면 true/false로 처리되겠지? 결과) 문자열로 들어간다 문자열에다가 ||나 &&계산을 한다. ||연산 -> 이미 앞이 true(문자열이 있으면)면 뒤에 계산 안하고 넘김 &&연산 -> 앞이 true면 (문자열이 있으면) 뒤에까지 계산후 넘김 &&와 ||의 원리를 이용하면 위와 같은 처리도 할 수 있다. name에 값이 할당되지 않았다면, defaultname을 할당하는 코드다.

카테고리 없음 2020.08.30

memset으로 bool값을 true로 설정해도 될까?

개요 memset은 1byte 단위로 해당 메모리 값을 초기화 시킨다 memset(포인터, 설정할 값, 크기) : void *memset(void *_Dst, int _Val, size_t _Size); : 끝나고 값 설정이 끝난 포인터를 반환한다. memset으로 int나 long 값을 10진수로 설정해줄땐 -1과 0밖에 설정하지 못한다. 물론 다른값을 설정할수도 있지만 그러면 원하는대로 안 들어간다. 이렇게만 가능! int num; memset(&num,-1, sizeof(num)); memset(&num, 0, sizeof(num)); 왜냐하면 memset은 1바이트 단위로 값을 넣기 때문이다. 0으로 초기화하는 경우를 보자. 1byte는 2진수로 00000000이다. 이걸 int크기인 4바이트로 ..

Study/C,C++ 2020.05.04

리눅스에서 cgroup 사용 예제

목표: openmpi를 cgroup을 이용해서 cpuset을 해 준 뒤에 mpirun -np / --cpu-set / bind-to core 옵션 줘서 실행해보기 1. cgroup 관리 툴을 설치 (안깔아도 되는데 까는게 편리) sudo apt-get install cgroup-tools 혹은 cgroup-bin 2. cgroup생성 sudo cgcreate -g cpuset:mpi_test sudo cgset -r cpuset.cpus="0,3" mpi_test sudo cgset -r cpuset.mem="0" mpi_test //안해주면 에러남 그리고 /sys/fs/cgroup/cpuset/mpi_test폴더 안에서 해야 적용되드라 cat /sys/fs/cgroup/cpuset/mpi_test/cp..

Study/linux 2019.11.08

도커에서 CentOS 컨테이너를 실행할 수 있는이유

현재 우분투를 사용하고있다. 그런데 우분투 위에서 다른 OS의 컨테이너를 실행할 수 있는 이유는 무엇일까? 도커는 호스트와 커널을 공유하기 때문이다. 엄격하게 리눅스는 '커널'만을 의미하고, Ubuntu나 Fedora, CentOS등은 리눅스의 서로 배포판일 뿐이다. 다른 말로 하면 Ubuntu, Fedora, centOS의 리눅스 커널은 동일하고, 그 위 파일시스템이나 프로그램 생김새가 다르다는 뜻이다. 즉, 리눅스 커널이라는 뿌리가 같으니 도커에서 다른 리눅스계통의 OS를 돌릴 수 있었던 것! 참고: http://korean-daeddo.blogspot.com/2016/11/blog-post.html?m=1 리눅스 배포판 종류 및 선택 리눅스 배포판의 종류와 선택 기준(또는 추천)을 알려주는 글입니다..

Study/linux 2019.10.29

docker에서 컨테이너 gui 실행하기

우분투의 그래픽은 시스템이 아니다. 프로그램이다. 그래서 리눅스 서버버전을 실행하면 gui가 없던 것!! 우분투는 `Xorg`라는 그래픽 프로그램을 이용한다. 즉, 얘가 있어야 그래픽을 띄워줄 수 있다는 얘기. 그럼 도커에서 그래픽을 띄워주려면? 호스트의 자원을 공유하면 된다. 호스트의 Xorg를 컨테이너가 이용하면 된다는 말. 실행옵션을 추가해주면 컨테이너에서도 그래픽을 볼 수 있다. 도커를 gui로 실행하는 방법은 두 가지가 있다. 1. VNC를 이용하거나 2. 단순히 XServer를 공유하거나. VNC를 이용하는 방법은 여기와 여기를 참고하자. Xauthority 어쩌구저쩌구한다. ...더보기 Xauthority becomes an issue with newer systems. I can eithe..

Study/linux 2019.10.18