균형. 그리고 진단
![]() |
|---|
| Ubuntu Sound Setting |
한 달 정도 걸리는거 같다. PC를 하나 조립하면서 걸린 시간 말이다. (물론 대부분의 시간은 As를 보내고 기다린 시간이기는 하다.)
베타 딱지가 붙은 BIOS가 메모리 뱅크 2개를 모두 지원하는 고마운 상황에 감사하며, 개발환경으로서의 우분투를 사용하고 있는데 말이다.
이 녀석에서 음악을 재생하면 오른쪽만 재상되는 이상한 현상을 보인다.
먼저든 생각은 Linux Sound Driver에 대한 걱정이었으나…
Ask Ubuntu에서 찾은 의외의 답변은 좌우 밸런스를 확인 해 보라는 것이었다. (물론 첫 댓글은 alxamixer를 터미널에서 구동해 보라는 것이었지만 말이다.)
회의. 그리고 진단
![]() |
|---|
| 메모리 진단 프로그램 MemTest |
무슨 생각이 들었는지 AMD CPU르 하나 주문하고, CPU를 샀으니 하는 빌미로 보드와 메모리 등을 호기롭게 주문 한 것 까지는 좋았는데.
처음 BIOS진입부터 사람 힘들게 하더니, OS를 설치하고 설정하는 과정에서 무수한 비정상적인 상황을 연출한다.
주말 양일간 열심히 설정을 해보고 내린 결론은 메모리 오류.
구매처에 유선으로 문의를 하니, 일단 메모리만 보내보라고 하더니, 검사하기 난해하다고 그냥 신품으로 보내주겠다고 해서 받아봤더니.
메모리 두 개 중에 하나는 실이 붙어있고, 하나는 그냥 은박지에 싸서 보낸 모양새가 내가 보낸 것을 되돌려준것인가 싶다.
유효한 JSON String을 검사하는 방법
금요일 저녁. 야근을 할 계획은 없었으나, 오전중에 팀원이 적용한 서비스 선처리 권한관련 이리저리 시간을 할애하다 보니.
사람들이 하나 둘 퇴근을 한 후. 마음을 다잡고 테스트를 하다보니, 무효한 JSON String에 대한 처리가 제대로 되고 있지 않은것이 보인다.
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(strJson);
폐쇄망이라 핸드폰으로 잠깐 구글링을 해 보고, 당연히 무효한 문자열을 파싱함에 있어 Exception을 throw 할 것으로 기대했으나.
try {
JsonObject jsonObject = jsonElement.getAsJsonObject();
} catch (IllegalStateException e) {
System.out.println("Not JSON Object");
}
퇴근을 하고, 집에 돌아와 좀더 찾다보니. 파싱 시점이 아닌 get시점에 catch하는 방법을 찾을수 있었다.
VSCode+Snipet+ShortCut
![]() |
|---|
| ShortCut JSON을 설정하는 버튼이.. |
지금 진행하는 프로젝트에서 매번 브랜치를 따고 있는데, 서로 약속한 브랜치명이 있다보니, 매번 에디팅하는 것을 귀찬아 하다 토요일 저녁 VSCode의 ShortCut을 사용하기로 하고 찾아보는데, 도저히 어떻게 설정을 했었는지 기억나지 않는다.
한참을 찾다, 결국 저 이미지상의 우측상단 아이콘을 누르는 것으로 모든 해결점을 찾아..
기억은 점점 흐릿해져간다.
Ubuntu Pro
![]() |
|---|
| Ubuntu Pro를 설정하고 |
일요일 아침 일어나 과거의 블로그 글을 밀어넣으려고하다 보니 원격의 서버에 자연스럽게 접근을 하는데, Ubuntu에서 Pro라는 컨셉을 광고하고 있다.
잠깐 찾아보다 개인사용으로는 무료라 하니 적용 해 본다.
UWP+Socket+Error 10013
토일 프로젝트로 UWP에서 MPD에 Socket으로 연결하는 작업을 주말마다 아주 조금씩 진행하고 있었다.
처음에는 MVVM 패턴을 이해하지 못해서 진도가 안나가다가 드디어 오늘 Socket 호출을 하게 되었는데 말이다.
socket.Connect(server.serverIp, server.serverPortInt);
이 단순한 문장에서 SocketError 열거형 10013 오류를 throw한다.
![]() |
|---|
| 어플리케이션 설정 기능 |
원인은 아무래도 UWP이다 보니, 이상한 짓을 하게 놔두지 않으려는 MS의 배려인거 같고.
이 프로그램에서 Socket을 사용할것이라고 설정 해 주면 잘된다.
Jekyll Theme al-folio
거의 1년 만에 미뤄뒀던 블로그를 아니 Jekyll을 다시 꺼내, 일요일 아침부터 만지작거리기 시작한다.
처음 시작 할 때는 Jekyll은 커녕 Ruby라는 것이 있는것만 알았지, 처음 써보는 상황이었다.
물론 지금도 Ruby를 사용하는건 아니다. Gemfile에 대해 알았을 뿐이다.
일요일 아침부터 시작한 Jekyll을 재 설정하면서 무료 Theme를 몇 개 섭렵해 봤는데, 그래도 1년 전에 깔짝거려 본 경험이 있어 그런지 al-folio를 발견하고는 몇 시간에 걸쳐 찬찬히 이주 작업을 했다.
그 사이에 Google Domain에서 blog host를 등록하고 Let’s Encrypt 인증서도 등록해야 했다.
RESTFul response status code에 대해
수요일.
만들고 있는 토이프로젝트가 드디어 데이터에 대한 추가, 변경 그리고 삭제에 들어가게 되어 생각한다.
데이터에 대한 추가가 발생하는 경우 201 Created를 보내준다고 하지만, 변경과 삭제는?
언듯 200인가 싶어 찾아보니, 204 No Content에 대한 내용이 있다.
복잡하게 생각 할 수도 있는데, 200은 화면을 갱신해야 하는 경우. 204는 화면을 (전체)갱신하지 않고 표현 할 수 있다면..으로 이해 해 보자.
나는 변경과 삭제시 해당 Table의 Row만 처리 할 예정이라 204를 보내기로 한다.
그런데, 추가시에는 어떻게 할 것인가? 화면 전체를 갱신 할 것인가?
사용자와 권한에 대한 생각
수요일.
사용자와 권한에 대해 생각한다.
<div class="mermaid">
erDiagram
ROLE ||--o{ ROLE-USER : "1:n"
ROLE ||--o{ ROLE-MENU : "1:n"
ROLE ||--o{ ROLE-API : "1:n"
USER ||--o{ ROLE-USER : "1:n"
ROLE-MENU }o--|| MENU: "1:n"
ROLE-API }o--|| API: "1:n"
</div>
과연 당신은 사용자와 권한에 대해 어떤 관계를 생각하고 있을까?
<div class="mermaid">
erDiagram
USER ||--o{ ROLE-ITEM : "1:n"
ROLE ||--o{ ROLE-ITEM : "1:n"
ROLE-ITEM }o--|| MENU : "1:n"
ROLE-ITEM }o--|| API : "1:n"
</div>
추상이라고 불리는 모델링은 정답이 없다.
Mermaid로 다이어그램 그리는 테스트
화요일.
GitHub에서 다이어그램이 필요한데, 당연 디이어그램을 이미지로 넣을 생각을 했더니 뭔가 방법이 있다.
Mermaid라는 녀석인데, 코드블럭을 이용해서 파싱하고 그것을 이미지(아마 SVG겠지? 라고 생각했더니 SVG다.)로 만들어 보여주는 모양으로 생각된다.
그런데, Jekyll사용자의 경우 그냥은 안되고 조금 손을 봐야 하는데, [미리 해 본 사람][https://frhyme.github.io/mermaid/Embedding_mermaid_in_github_page/]이 있어서 크게 어렵지는 않다.
<div class="mermaid">
sequenceDiagram
WebBrowser->>+Nginx: Request /
Nginx-->>-WebBrowser: Response *.js
WebBrowser->>+WebBrowser: Vuex.route에서 판단
WebBrowser->>+Nginx: Request /login
Nginx-->>-WebBrowser: Response login.vue(js)
WebBrowser->>+WebBrowser: Vuex.store에서 요청
WebBrowser->>+Uvicorn: Request /api/loginId (Proxy Bypass)
Uvicorn->>+MySql: Select User
MySql-->>-Uvicorn: User Data
Uvicorn-->>+WebBrowser: Access Token
WebBrowser->>+WebBrowser: internalStorage에 저장
</div>




