병.의원 소프트웨어 개발 업체 | 2015년 ~ 현재
C# 관련 강의 유튜브 운영 : 까불이코더(https://www.youtube.com/@kaburi-coder) 2022 ~
현재 사용 중인 주력 기술 스택은 다음과 같습니다.
프로그래밍 언어: C#, TypeScript, Dart, Python, VB.NET
데스크탑 애플리케이션: WinForms, WPF
모바일 앱 개발: Flutter
웹 개발: React, Next.js, Express, NestJS
Gen AI: LangChain, LangGraph
컨테이너 및 오케스트레이션: Docker, Kubernetes, Helm, ArgoCD ..
CI/CD: GitHub Actions
DataBase: MySql, Postgresql, MongoDB, SQLITE 등
2015년부터 현재까지 소프트웨어 개발 분야에서 다양한 프로젝트를 성공적으로 이끌어온 경험을 보유하고 있습니다.
기술 리더로서 팀을 이끌며 효율적인 개발 프로세스를 유지하고, 최신 기술 스택을 적극적으로 도입하여 소프트웨어의 품질과 사용자 경험을 향상시키는 데 주력하고 있습니다.
현재는 데스크톱과 웹의 통합 개발을 주도함과 동시에, 사내 직원 교육을 책임지고 있습니다.
또한 사용자 친화적인 애플리케이션 개발과 배포 자동화, DevOps 도입을 통해 프로젝트의 전반적인 성공에 기여하고 있습니다.
지속적인 자기계발을 통해 변화하는 기술 환경에 유연하게 대응하며, 높은 열정으로 새로운 도전에 임하고 있습니다.
Khóa học
Đánh giá khóa học
- Từ cơ bản đến ứng dụng thực tế của lập trình C#
- Từ cơ bản đến ứng dụng thực tế của lập trình C#
- Sử dụng các điều khiển tùy chỉnh C# WinForm. Tăng cường năng lực thực tế
jungsik
·
[C#]WinForm MVP + DI(dependency injection) + phím tắt tùy chỉnh: Làm chủ kỹ năng phát triển nâng cao[C#]WinForm MVP + DI(dependency injection) + phím tắt tùy chỉnh: Làm chủ kỹ năng phát triển nâng cao- Từ cơ bản đến ứng dụng thực tế của lập trình C#
Bài viết
Hỏi & Đáp
~ 연산자 이해가 안되요
맨 앞자리가 부호를 나타내고 나머지를 10진수로 변환하면 정수 값이 반환 된다는 것은 반은 맞고 반은 틀린 말입니다. 양수인 경우는 부호 숫자 외 나머지 수를 10진수로 변환하면 그 값이 저희가 알고 있는 값이 맞습니다.이진수 (0111) 로 예를 들어보도록 하겠습니다.맨 앞 0 은 양수를 나타내고 나머지 111 => 4 + 2 + 1 = 7 이 됩니다.하지만 음수인 경우는 다릅니다. 이진수 (1111) 로 예를 들어보면맨 앞의 1은 음수를 나타내고 나머지 111 => 4 + 2 + 1 = 7 의 부호만 - 를 붙여 -7이 되는 것이 아닙니다.먼저 1의 보수 후, 2의 보수를 진행하고 부호를 붙여야 음수를 구할 수 있습니다.1의 보수 => 0000 2의 보수 => 0001 = 1 => 부호 추가 => -1 이 됩니다.위 계산을 또 다른 방식으로 해석하면1111 에서 맨 앞자리(부호 -): 2^3 = -8 두번째 자리(+) : 2^2 = 4 세번째 자리(+) : 2^1 = 2 네번째 자리(+) : 2^0 = 1 --------------------------- 결과 = -1이 됩니다. 사람 입장에선 어려워 보일 수 있으나 컴퓨터 입장에선 훨씬 연산이 쉽고 효율적입니다. 컴퓨터 시스템이 2보수 방식으로 계산되는 뺄셈 예제를 보여드릴게요다음은 5-3에 대한 예제입니다. 0101 (5) + 1101 (-3, 2의 보수) ------- 10010 (5비트가 되지만, 맨 앞(왼쪽) 1비트는 버림) 남은 4비트는 0010 => 결과는 2 따라서 다음과 같은 장점이 있습니다.1. 덧셈과 뺄셈을 동일한 회로로 처리할 수 있음2의 보수 표현을 사용하면 덧셈과 뺄셈을 같은 방식(가산기)으로 계산할 수 있습니다.예를 들어, 5 + (-3)을 계산할 때, -3을 2의 보수로 바꿔서 5에 더하면 결과가 바로 나옵니다.별도의 뺄셈 회로가 필요 없습니다.2. 0이 유일하게 표현됨1의 보수 방식(모든 비트를 반전)에서는 +0과 -0이 모두 존재(예: 0000=+0, 1111=-0)해서 혼란을 줍니다.2의 보수에서는 0을 한 번만 표현할 수 있습니다.3. 오버플로우 처리가 쉽고, 수식이 단순함2의 보수에서는 오버플로우(자릿수 초과) 발생 시, 하위 비트만 남기면 결과가 올바릅니다.수식이 단순해서 컴퓨터 하드웨어 설계가 쉬워집니다.
- 0
- 5
- 42
Hỏi & Đáp
thread join 사용
엄청난 열정에 놀랐습니다. ㅎㅎ 아래에 AI 답변도 존재하지만 추가로 정리해드리겠습니다. WinForms에서 Join() 사용 시 UI 멈춤현상메인(UI) 쓰레드에서 GoThread.Join()을 호출하면, 해당 쓰레드가 종료할 때까지 현재 쓰레드에서 대기하게 됩니다.UI와 관련된 처리는 모두 메인 스레드에서 이뤄지므로 Join()에서 대기하는 동안 폼이 멈춘것 처럼 보이게 돼요.**해결방안**쓰레드 작업이 끝나는 것을 기다리면서 UI가 멈추지 않게 하려면,Join()을 직접 호출하지 말고, 쓰레드 작업이 끝났을 때 UI에 알리거나(예: 이벤트, 콜백),BackgroundWorker, Task, async/await 등 비동기 프로그래밍 패턴을 사용하는 것이 좋습니다.(일반적으로 async/await를 가장 추천 드립니다.)쓰래드 객체를 null로 설정하는 것?쓰레드가 끝나면, 해당 Thread 객체는 더 이상 사용할 수 없으므로 필요하면 null로 만들어주는 것도 괜찮은 방법입니다. (null 을 할당하여 참조를 해제해주면 가비지 컬렉터가 빠르게 수거할 수 있어요.)하지만 꼭 null로 만들 필요는 없고 쓰래드가 살아있는지(IsAlive 속성)만 체크해서 필요할 때 Thread객체를 새로 만들어도 괜찮습니다.C#에서 클래스의 명시적 종료(소멸) 방법C#에는 C++의 delete처럼 객체를 “즉시” 소멸시키는 문법이 없습니다.C#의 객체는 해당 객체를 참조하는 곳이 없을 때(즉, 사용하지 않게 되었을 때)가비지 컬렉터(GC)가 자동으로 메모리를 정리(소멸)합니다.IDisposable 인터페이스를 구현하고 Dispose()를 호출하는 것도 사실 메모리 자체는 GC가 회수하는 것 입니다.
- 0
- 4
- 35
Hỏi & Đáp
21. PickList(디자이너 생성) 강좌 문의
제가 놓친 부분을 찾아서 알려주셔서 감사드립니다. 해당 부분은 텍스트로 설명 추가하여 수정했습니다.
- 0
- 1
- 16
Hỏi & Đáp
블로그 글
질문 글을 늦게 확인했네요 ㅠ.ㅠ블로그 글은 여전히 존재합니다 ~!
- 0
- 2
- 36
Hỏi & Đáp
Delegate 내용은 어디서 다루나요?
14. 대리자 섹션을 보시면 됩니다. 감사합니다 ^^
- 0
- 2
- 61
Hỏi & Đáp
Xunit private 메서드 테스트
해당 문의 사항에 대한 강의가 업로드 되었습니다. 감사합니다. https://inf.run/NwUf1
- 0
- 2
- 63
Hỏi & Đáp
자원정리 개념
인프런 AI 인턴의 설명이 훌륭하네요 ㅎㅎ제가 obj = null로 할당한 예제를 보여드린 것으로 약간 헷갈리신 것 같습니다. null 할당은 객체가 GC의 대상이 되도록 도울 수 있습니다. 왜냐면 GC는 참조가 되지 않은 객체를 메모리에서 제거하거든요.즉 변수에 null을 할당하는 것은 메모리에서 객체를 직접 해제하는 행위가 아닙니다. finally블록은 설명드렸다시피 return문을 만나더라 해도 반드시 실행이 보장되는 코드 블록입니다.그러하여 일반적으로 finally에는파일 스트림 (FileInputStream, FileOutputStream 등)네트워크 소켓 연결 (Socket)데이터베이스 연결 (Connection)그래픽 리소스 등위 항목의 자원을 정리할 때 주로 사용된다고 보시면 되겠습니다. 반드시 위와 같은 경우가 아니더라해도 제가 예제로 보여드린 바와 같이 더 이상 사용되지 않는힙 영역의 객체를 참조를 끊어주기 위해서도 종종 사용된다고 보시면 되겠습니다.
- 0
- 2
- 70
Hỏi & Đáp
강의 영상 오류
수정하여 다시 업로드했습니다.불편함을 드려 죄송합니다.그리고 감사드립니다~!
- 0
- 1
- 53
Hỏi & Đáp
Item 속성 Serializable 오류
안녕하세요. 상훈님 먼저 영상을 수강해주셔서 감사드립니다.본 강의에서는 .Net8 환경에서 촬영된 영상이다보니 별도로 직렬화 어트리뷰트를 작성하지 않아도 오류가 뜨지 않았습니다. 하지만 .Net Framework환경에서는 직렬화 어트리뷰트가 빠지게 되면 오류가 발생되는 현상이 있습니다.직렬화 어트리뷰트는 바로 다음 강의에서 나오는 [DesignerSerializationVisibility] 를 추가해주시면 되겠습니다. [Serializable] 는 일반적으로 디자이너에서 쓰이진 않습니다.따라서 직렬화 어트리뷰트를 [DesignerSerializationVisibility] 로 변경해주시면 되겠습니다. 궁금한 점이 있다면 언제든 질문주세요~ 감사합니다.^^
- 0
- 1
- 88
Hỏi & Đáp
this string text의 동작 과정이 궁금합니다.
네 정확하게 이해하셨습니다. string name = "John"; static class MyClass { public static void Print(this string text) { // 본문 내용.. } } name.Print(); // MyClass.Print(name); 과 동일한 동작MyClass.Print(name); 과 동일한 동작이라고 보시면 되겠습니다. 정리하자면this string text 는 string 타입에 Print 라는 새로운 메서드를 추가하는 것처럼 보이게 합니다.name.Print() 호출은 실제로는 MyClass.Print(name) 와 같이, name 변수를 Print 메서드의 text 인자로 전달하는 형태로 동작합니다.this 키워드는 확장 메서드가 어떤 타입의 변수에 대해 호출될 수 있는지, 그리고 호출 시 해당 변수가 메서드의 어떤 인자로 전달될지를 정의하는 역할을 합니다.
- 0
- 2
- 96