22 6월 2025

[사회과학] [박진영의 사회심리학] “나는 우주에서 하찮은 존재”…너그러운 사회 만든다

[사회과학] [박진영의 사회심리학] “나는 우주에서 하찮은 존재”…너그러운 사회 만든다

[박진영의 사회심리학] “나는 우주에서 하찮은 존재”…너그러운 사회 만든다

입력
게티이미지뱅크 제공

게티이미지뱅크 제공

우주에 관한 강의를 듣다가 이렇게나 거대한 우주에서 이렇게나 작은 지구에, 같은 시간 같은 장소에 우리가 모여있다는 것은 기적(매우 작은 확률이라는 의미에서)이라는 이야기를 들은 적이 있다.

이야기를 들으면서 강의실을 한 번 둘러보고 또 옆에 앉아있는 친구를 바라보며 지나가는 그 찰나의 순간이 매우 소중하게 느껴졌던 기억이 난다. 우리가 속해 있는 시공간에 비해 우리가 너무나 작은 존재라는 사실이 우울하기보다 그래서 더 인생이 특별하다는 느낌을 받았다.

한편 너도 나도 다 결국에는 우주먼지에 불과한데 인간이 대단하면 얼마나 대단하고 못났으면 또 얼마나 못났겠냐고 결국 도토리 키재기에 불과한데 서로 비교하지 말고 사이좋게 지내면 좋겠다는 생각이 들었다.

결국 다 늙고 병들어 죽게 될 텐데 마지막에 차가운 사람으로 기억되기보다 따뜻한 사람이었다고 기억되면 좋지 않을까?

이렇게 우리 존재의 하찮음을 떠올리면 우울해지고 불안해지는 사람들도 있겠지만 그렇지 않은 사람들도 많아서 되려 어깨가 가벼워지고 자신과 타인을 향해 더 너그러운 시선을 가지게 된다는 연구들이 있었다.

거대한 자아보다 “작은 자아(small self)”을 갖는 것이 때로는 더 정신건강에 유익하다는 것이다.
예를 들어 사람들에게 웅장한 자연경관을 보여주거나 우주의 시작부터 인류의 출현과 현재까지를 달력으로 만들어서 우주가 1월에 태어났다면 인류는 12월 31일 마지막 몇 초에 불과한 짧은 시간을 살아가고 있다는 점을 강조한다.

그러면 사람들은 자신의 존재를 비교적 작게 느끼게 된다. 다시 말해 나라는 존재와 내가 가지고 있는 문제들이 별로 중요하지 않은 것 같다는 현상을 보인다.

매튜 혼시 퀸즐랜드대 연구팀에 의하면 이렇게 존재의 무게를 조금 덜어내는 과정을 거치면 불안이 줄어들고 특히 자기 자신의 존재를 있는 그대로 받아들일 의향과 타인의 잘못 또한 용서할 의향이 커지는 현상이 나타난다.

예전에 한 다큐에서 사람들은 일반적으로 사형수들에 대해 매우 부정적인 시각과 태도를 보이지만 사형 집행일이 되면 가장 좋아하는 음식을 주거나 마지막은 가급적 편하기를 바란다는 이야기를 들은 적이 있다.

‘죽음’이라는 생명체라면 다 무섭게 느껴지는 절대적인 마지막, 끝, 소멸에 대한 공포와 그 공포 앞에서 초라한 우리들의 모습을 모두가 본능적으로 알기 때문일지도 모르겠다.

내가 너보다 더 크거나 작다고 재기보다 때로는 우리 모두 하찮다는 사실을 지각하는 것이 보다 너그러운 사회를 만드는 데 보탬이 될지도 모르겠다.

Hornsey, M. J., Tyson, C., Ferris, L. J., Crimston, C. R., Faulkner, C. & Barlow, F. K. (2025). The cosmic calendar: Being reminded of the vastness of time can improve well-being. The Journal of Positive Psychology, 1-12. https://doi.org/ 10.1080/17439760.2025.2481039

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

Loading

22 6월 2025

[사회과학] [박진영의 사회심리학] 인간관계를 망치는 ‘정치적 파벌주의’ 

[사회과학] [박진영의 사회심리학] 인간관계를 망치는 ‘정치적 파벌주의’ 

[박진영의 사회심리학] 인간관계를 망치는 ‘정치적 파벌주의’ 

입력
악수하는 미 민주·공화 부통령 후보. 연합뉴스 제공

악수하는 미 민주·공화 부통령 후보. 연합뉴스 제공

한국을 포함한 많은 나라들에서 특히 그 중에서도 미국에서 사람들의 정치적 입장 차이가 점점 더 심화되고 있다.

실제 정치 제도나 이득을 떠나 마치 ‘당파싸움’처럼 정치적 소속이 일종의 ‘정체성’이 되고 있다고 해서 정치적 파벌주의(Political Sectarianism)라고 불리는 현상이다. 학자들에 의하면 지금의 파벌주의는 거의 종교적 맹신의 양상을 보인다.

엘리 핀켈 미국 노스웨스턴대 심리학자 등에 의하면 정치적 파벌주의는 세 가지 요소로 구성된다.

① 타자화(othering): 다른 당을 지지하는 사람들을 자신과는 근본적으로 다른 종류의 사람으로 보는 것
② 거부/기피(aversion): 상대를 감정적으로 싫어하고 불신하는 경향
③ 도덕화(moralization): 상대를 사회적으로 자신과 멀리 존재하고 이념적으로 과격하며 과도하게 정치세력화되어 있고 혐오스러운, 함께 더 나은 세상을 만들기 위해 협의할 수 ‘없는’ 존재로 보는 것이 여기에 해당된다.

실제로 1970년부터 최근까지 미국에서 민주당과 공화당 지지자들이 자신과 같은 당을 지지하는 사람들과 또 다른 당을 지지하는 사람들에 대해 느끼는 온도를 살펴보면 최근에는 같은 당을 지지하는 사람들(공화당-공화당, 민주당-민주당)에 대해 느끼는 온기보다 다른 당을 지지하는 사람들(공화당-민주당, 민주당-공화당)에 대해 느끼는 차가움이 더 큰 것으로 나타났다.

같은 편에 대한 긍정적 인식보다 상대편에 대해 느끼는 거부감이 더 커졌고 이것이 사람들의 투표 같은 정치적 행동에 점점 더 큰 영향을 미치고 있는 경향이 확인되고 있다.

또한 서로를 점점 이해할 수 없는 외계인 또는 괴물 같은 존재로 인식하면서 실제 차이보다 상상한 차이가 훨씬 큰 현상이 나타나고 있다.

예를 들어 한 조사에서 공화당 사람들에게 민주당 사람들 중 몇 %가 성소수자일 것 같은지 물었을 때 약 32%일 것이라고 응답했지만 실제로는 6% 정도라는 결과가 있었다.

반대로 민주당 사람들에게 공화당 사람들 중 몇 %가 연 소득 3억 이상일지 물었을 때 평균적으로 약 38%가 부자일 것 같다는 응답이 나왔지만 실제로는 2%에 불과하다는 조사 결과도 있었다.

핸드폰만 열면 타인과 연결되는 시대에 점점 더 서로를 잘 알지 못하게 되었다는 아이러니한 결과다.

핀켈 등은 여기에 대해 ‘공정성’이나 팩트 체크보다 입맛에 맞는 미디어만 소비하는 현상과 여기에 편승해서 자극적이고 편향된 내용을 만들어내는 미디어, 자극적인 내용들이 더 많이 노출되도록 하는 소셜 미디어, 파벌주의를 적극 이용하는 정치인과 외부세력(예, 러시아의 선거개입), 여느 때보다 사회적 지위와 자산의 양극화가 심한 사회경제적 토양 등이 큰 영향을 미친다고 보았다.

그 결과 지금의 정치인들은 정책을 선전하기보다 상대편이 반칙을 사용하고 있는데 우리가 가만히 있으면 바보 되는 것이라는 식의 혐오와 파벌주의를 적극 활용하는 방식의 메시지를 보내고 있다는 것이 학자들의 분석이다.

일례로 신종 코로나바이러스 감염증(COVID-19·코로나19) 팬데믹이 닥쳤을 때 미국은 다른 어느 나라보다 팬데믹을 잘 헤쳐 나갈 자원들을 풍부하게 가지고 있었지만(예를 들어 빠른 백신 개발) 질병이 ‘정치화’되는 바람에 사회적 거리두기와 마스크 사용, 백신 접종 등의 행동이 파벌에 따라 크게 달라지고 말았다. 그 결과 100만명 사망이라는 믿기 어려운 수치를 경험하고 말았다.

파벌주의가 심화될수록 정치와 크게 상관 없었던 상식적인 행동들마저 파벌에 따라 크게 달라질 수 있다는 것이다. 여기에는 민주 사회를 지키기 위한 상식도 얼마든지 해당될 수 있다.

상대편이 싫어질수록 상대편과는 대화를 시도할 가치조차 없다고 단정지을수록 테러와도 같은 극단적이고 반민주적인 행동으로 얼마든지 국정을 마비시킬 수 있는 것이다. 공교롭게도 미국에서도, 한국에서도 국회의 기능을 마비시키기 위한 시도들이 행해진 걸 보면 아주 낯선 이야기는 아니다.

한창 팬데믹으로 인해서 거리두기 등의 정책들이 시행되고 있을 때 당연하다고만 생각했던 정책들에 반대하는 사람들이 적지 않은 것을 보고 이상하다는 생각을 했었다. 물론 이상한 이유로 반대하는 사람들도 있었지만 이후 가정 폭력이나 아동 학대가 크게 증가하고 워킹맘들의 경우 직장생활을 그만둘 수 밖에 없었던 사례들이 많았다는 이야기를 들었다.

나의 짧은 생각과 달리 집보다 밖으로 나가는 것이, ‘학교’에 가는 것이 안전한 사람들이 많이 존재했고 생계활동에 보다 많은 제약이 있는 사람들이 다수 존재했다. 삶은 복잡하고 모두에게 좋은 정책이란 존재하기 어렵다는 사실을 잊지 않으려 노력하고 있다.

또한 인간의 나약함을 이해하고 나면 인간의 악함 또한 이해하기 어렵지는 않은 것 같다. 물론 이해하는 것과 받아들이고 수용하는 것은 또 다른 문제여서 이해는 되더라도 싸우기로 마음 먹을 수 있다.

그래도 최소한 ‘같은 인간’이라고 보는 자세는 지켜야 할 것 같다는 생각이다. 그래야 상대를 같은 인간으로 보지 않을 때 저지를 수 있는 많은 실수를 피해갈 수 있지 않을까?

Finkel, E. J., Bail, C. A., Cikara, M., Ditto, P. H., Iyengar, S., Klar, S., … & Druckman, J. N. (2020). Political sectarianism in America. Science, 370(6516), 533-536.

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

Loading

9 6월 2025

[자유게시판] ???? ChatGPT로 그림 그리기 & Stable Diffusion 활용법

[자유게시판] ???? ChatGPT로 그림 그리기 & Stable Diffusion 활용법

d7b6ea12-6678-452b-9249-85d7ffb6502f.png

???? ChatGPT로 그림 그리기 & Stable Diffusion 활용법

AI가 텍스트를 이해하고, 심지어 이미지를 직접 그려주는 시대가 되었습니다. 이 글에서는 ChatGPT를 활용해 그림을 그리는 방법과 Stable Diffusion과 함께 사용하는 그림 생성 방법을 소개합니다.


???? 1. ChatGPT만으로 그림을 그리는 방법

ChatGPT는 기본적으로 텍스트 기반이지만, **OpenAI의 이미지 생성 도구(DALL·E API)**를 연동하거나 ChatGPT Pro 사용자라면 이미지 생성 기능을 직접 사용할 수 있습니다.

✅ 사용 예시 (ChatGPT에 프롬프트 입력)

“노을지는 바다를 바라보는 고양이 일러스트를 그려줘”

ChatGPT는 내부적으로 이미지 생성 모델을 호출하여 그림을 만들어 줍니다.
그림의 스타일도 변경할 수 있습니다.

예:

“고흐 풍의 해바라기 그림을 그려줘”
“픽사 스타일의 우주 비행사 캐릭터를 그려줘”

???? 장점

  • 별도의 설치 없이 사용 가능 (Pro 사용자)

  • 직관적인 대화형 인터페이스

  • 반복적으로 스타일 수정 가능


????️ 2. Stable Diffusion으로 그림 그리는 방법

Stable Diffusion은 오픈소스 텍스트-투-이미지 모델로, 보다 세밀한 설정과 고퀄리티 이미지 생성이 가능합니다. ChatGPT를 활용하면 프롬프트 생성 도우미로 사용하면 아주 유용합니다.

???? 사용 도구 예시

???? ChatGPT + Stable Diffusion 활용 순서

  1. ChatGPT에게 프롬프트를 만들어 달라고 요청

    “중세 판타지 스타일의 성과 용을 배경으로 한 전사 일러스트 프롬프트 생성해줘”

  2. Stable Diffusion 웹 UI나 Colab에 프롬프트 입력

  3. 이미지 생성

  4. 필요시 ChatGPT에게 프롬프트 개선 요청

✨ 예시 프롬프트

 
css
A futuristic samurai standing under neon lights, cyberpunk city, detailed, 4K, dramatic lighting, artstation

???? 활용 팁

상황 프롬프트 예시
캐릭터 디자인 “anime girl with fox ears in traditional Japanese kimono, forest background”
배경 일러스트 “medieval castle surrounded by mountains, early morning mist, high detail”
로고 스타일 “minimalist owl logo, geometric, flat design, black and white”

Loading

5 6월 2025

[알아봅시다] [ETC.] “윈도우 배경 속 푸른언덕은 어디로”…네티즌들 탄식한 현재 모습

[알아봅시다] [ETC.] “윈도우 배경 속 푸른언덕은 어디로”…네티즌들 탄식한 현재 모습

“윈도우 배경 속 푸른언덕은 어디로”…네티즌들 탄식한 현재 모습

1-828db683.png
 
윈도우XP 배경화면으로 사용된 사진 ‘블리스’와 실제 촬영지의 현재 모습. /인스타그램

윈도우XP의 대표적인 배경화면으로 유명한 ‘푸른 언덕’의 실제 촬영지의 현재 모습이 소셜미디어상에서 크게 화제가 됐다.

6일 영국 데일리메일은 “윈도우XP 배경화면으로 사용된 사진 ‘블리스’가 촬영된 실제 장소의 변화한 모습이 네티즌들을 실망하게 했다”고 전했다.

흰 구름이 떠있는 파란 하늘 아래 푸르른 언덕이 펼쳐진 장면이 담긴 이 사진은 ‘세계에서 가장 많이 본 사진’이라고 불릴 만큼 유명하다. 이 사진은 사진작가 찰스 오리어가 1998년 미국 나파밸리를 지나다 촬영한 것이다. 매체는 “당시 그는 깨끗한 포도밭을 보고 차를 멈춰 세워 이 사진을 찍었다. 포도밭이 깔끔하게 정리돼 있었던 건, 이전 해 해충 피해로 들판을 벌채한 상태였기 때문”이라고 설명했다. 이후 2001년 마이크로소프트가 이를 윈도우 XP 운영체제의 기본 배경화면으로 채택했다.

최근 한 네티즌이 세월에 따른 실제 촬영지의 변화 과정을 인스타그램에 공개해 크게 화제가 됐는데, 이를 본 네티즌들이 “사진과 너무 달라졌다”며 실망감을 감추지 못했다고 매체는 전했다.

매체는 “소셜미디어 이용자들은 사진이 촬영된 지 27년이 지난 현재 이 전설적인 장소가 ‘파괴’되었다고 주장한다”며 “사진에서 알 수 있듯, 많은 사람의 컴퓨터 배경이 되었던 푸른 구릉은 오래전에 사라지고 포도원으로 대체됐다”고 전했다.

이 게시물을 접한 네티즌들은 “블리스 사진을 몇 분 동안 쳐다보면서 나도 그곳에 가고 싶다고 생각했었는데, 너무 슬프다” “우울하다” “10년 후면 주차장이 되지 않을까” “생생하고 다채로웠던 세상이 칙칙한 회색빛으로 물들었다” 등 아쉬움 가득한 반응을 보였다.

반면 이외에도 “그곳에 갔었는데 오늘도 정말 아름다웠다” “여전히 아름다운 포도원” “모두가 마치 저곳이 회색 벽돌 아파트가 된 것처럼 반응한다” “그냥 계절에 따른 변화일 수도 있다” 등 의견도 나왔다.

김가연 기자

[출처] “윈도우 배경 속 푸른언덕은 어디로”…네티즌들 탄식한 현재 모습

Loading

31 5월 2025

[사회과학] [박진영의 사회심리학] 외롭다고 느낄수록 수명 짧아진다

[사회과학] [박진영의 사회심리학] 외롭다고 느낄수록 수명 짧아진다

[박진영의 사회심리학] 외롭다고 느낄수록 수명 짧아진다

입력
게티이미지뱅크 제공

게티이미지뱅크 제공

마음과 몸이 하나라는 것을 가장 잘 보여주는 예라고 하면 아마 ‘외로움’일 것이다. 기존 건강상태, 교육수준, 소득, 성별, 나이, 우울증 여부 등과 상관 없이 외로운 사람들은 그렇지 않은 사람들에 비해 더 빨리 노화하고 각종 심혈관 질환, 고혈압, 면역 반응 이상, 기억력 및 인지능력 감퇴에도 더 취약하다는 연구 결과들이 있다.

외로운 사람들은 그렇지 않은 사람들에 비해 응급하지 않은 수술을 받았을 때에도 사망 확률이 더 높았다는 연구 결과도 있었다. 이렇게 외로움이 직접적으로 건강과 수명에 영향을 미칠 수 있음을 시사하는 연구 결과들이 다수 보고되고 있다. 따라서 의료 현장에서도 또 공공 보건 차원에서도 외로움의 악영향을 줄일 수 있는 방안들에 대한 논의가 활발하게 이어지고 있다.

최근 설신 유 콜롬비아대 어빙 메디컬 센터 소속 연구자 등의 연구에 의하면 외로움의 악영향은 ‘누적’ 되는 듯 보인다. 1996년부터 2004년까지 약 9000명의 사람들을 대상으로 외로움을 측정하고 이후 2019년도에 외로움과 사망률간의 상관관계가 있었는지 살펴본 결과 우선 십여 년 전에 단 한 번도 외롭다고 응답하지 않은 사람들에 비해 한 번 외로웠다고 응답한 사람들이 더 중, 장년, 노년층에 이르렀을 때 사망률이 높았던 것으로 나타났다.

또한 한 번 외로웠다고 응답한 사람보다 두 번 외로움을 보고했던 사람들이 더, 두 번 외로웠던 사람들보다 세 번, 그러니까 더 긴 시간에 걸쳐 외로웠던 사람들이 더 사망률이 높은 편이었다.

한가지 중요한 사실은 외로움은 ‘주관적’ 지표라는 점이다. 그러니까 겉으로 보이기에 친구가 별로 없고 사회적 활동을 잘 하지 않는다고 해서 외로운 것도 아니고 항상 수 많은 사람들에 둘러 쌓여 있는 소위 ‘인싸’라고 해서 외롭지 않은 것도 아니다.

달리 말하면 사람들마다 인간관계에서 원하는 것이 다르고 어떤 이유로 이게 충족되지 않으면 언제 어디서든 우리는 외로움을 느낄 수 있다.

예를 들어 나의 경우 친구들과 자주 보지 않아도 이따금씩 연락하고 또 마음이 잘 통한다고 여겨지는 친구 몇 명만 있으면 외로움을 느끼지 않지만 기본적으로 원하는 인간관계량이 많고 원하는 친밀도 또한 매우 높은 사람의 경우 사람을 아무리 많이 만나도 사회적 허기인 외로움이 충족되지 않을 수 있다.

이 외에도 인간은 어차피 타인과 100% 마음을 통할 수 없다거나 노화와 죽음에 이르는 과정에서 많은 사람들이 혼자가 된다는 존재론적인 이유로 고질적인 외로움을 느끼는 사람도 있을 수 있겠다.

이 경우 그냥 그게 사는 것이라고 받아들이기 때문에 삶의 다양한 시점에서 이따금씩 존재하는 좋은 인연들이 실은 전혀 당연하지 않고 고마운 기적이었음을 깨달으면 어느 정도 편해질 수 있겠다. 하지만 안타깝게도 모두가 그렇게 할 수 있는 것은 아니다.

이렇게 외로움은 마음이 결정하는 주관적인 것이어서 이 연구에서도 객관적 사회적 고립 지수(objective social isolation index), 예를 들어 같은 가구 내 구성원 수, 거주지 인근의 친한 친구 수, 거주지 인근의 친척 수, 종교적 또는 기타 자선 단체 자원봉사 빈도, 그리고 이웃과의 만남 빈도 등을 통제했음에도 불구하고 외로움은 여전히 미래 사망률을 예측했다.

외로움은 결국 마음에 달린 것이지만 그렇다고 여기에 사회적 요인이 전혀 없는 것은 아니다. 예를 들어 극심한 경쟁으로 인해 마음을 터놓고 이야기할 사람을 찾는 것 조차 힘겨운 사회와 비교적 그렇지 않은 사회가 있을 것이다.

여러가지 이유로 사람들의 등급을 나누고 다름을 틀림으로 치부하며 차별해서 인간의 가장 근본적인 욕구인 소속 욕구를 충족하는 데 어려움이 많은 사회와 비교적 그렇지 않은 사회가 있을 것이다. 외로움에 보다 취약한 사회가 있다는 얘기다.

한국 사회의 개개인의 행복 지수가 최하위에 속하는 것 또한 혹시 외로움에 취약한 사회인 게 한 몫 하는 것은 아닌지 생각해본다. 그런 주제에 또 함께 살기를 추구하기 보다 조금이라도 더 남들 위에 올라가서 차별을 ‘하는’ 쪽에 붙는 게 목표이고 속은 곪았어도 겉만 멀쩡히 꾸며서 ‘과시’하는 것이 사회 규범인 것 또한 상당히 큰 문제라는 생각이 든다.

우리 사회에서 외로움을 해소하기 위한 솔루션이 가능할까. 이제부터라도 논의해봐야 하지 않을까.

Yu, X., Cho, T. C., Westrick, A. C., Chen, C., Langa, K. M., & Kobayashi, L. C. (2023). Association of cumulative loneliness with all-cause mortality among middle-aged and older adults in the United States, 1996 to 2019. Proceedings of the National Academy of Sciences, 120(51), e2306819120.

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

Loading

29 5월 2025

[인공지능 기술] [알아봅시다] 개발자의 chatGPT 활용법

[인공지능 기술] [알아봅시다] 개발자의 chatGPT 활용법

25931365-b065-467e-bd43-44127efdf182.png

서론

현대 소프트웨어 개발 환경에서 AI 비서로 자리 잡은 ChatGPT는 단순한 문답을 넘어 다양한 개발 단계에서 생산성을 크게 향상시켜 줍니다. 이 포스트에서는 코드 작성부터 테스트, 문서화, CI/CD 파이프라인 통합까지 개발자가 ChatGPT를 활용할 수 있는 대표적인 방법들을 살펴봅니다.


1. 코드 스캐폴딩(Scaffolding) 및 초기 구조 생성

  • 프로젝트 템플릿 생성

    • “새로운 Django 프로젝트 기본 설정 코드를 생성해줘”

  • CRUD 엔드포인트 초안

    • “Express.js로 users CRUD API 라우터 코드를 짜줘”

  • 디렉터리 구조 제안

    • “React + TypeScript 프로젝트 구조를 어떻게 잡는 게 좋을까?”

 
javascript
// 예시: Express.js CRUD 스캐폴딩 const express = require('express'); const router = express.Router(); // GET all users router.get('/users'async (req, res) => { // ChatGPT가 제안한 기본 로직 }); // POST create user router.post('/users'async (req, res) => { // ... }); module.exports = router;

2. 디버깅 및 오류 해결

  • 에러 메시지 분석

    • “이 Node.js 에러 스택을 보고 원인과 해결 방법을 알려줘”

  • 코드 리뷰를 통한 버그 찾기

    • “다음 함수에서 잠재적인 null 참조 버그가 있을까?”

  • 리팩터링 제안

    • “이 파이썬 함수의 가독성을 높이도록 리팩터링해줘”


3. 코드 문서화 및 주석 작성

  • 함수/클래스 설명 자동 생성

    • “이 함수의 역할을 한 문장으로 요약해줘”

  • README.md 작성 보조

    • “이 프로젝트의 README 템플릿을 작성해줘”

  • 주석 일관성 유지

    • “이 자바스크립트 코드에 JSDoc 스타일 주석을 추가해줘”

 
markdown
/** * @function addTwoNumbers * @param {number} a - 첫 번째 숫자 * @param {number} b - 두 번째 숫자 * @returns {number} 두 수의 합 */ function addTwoNumbers(a, b) { return a + b; }

4. 테스트 케이스 및 자동화 스크립트 생성

  • 유닛 테스트 템플릿

    • “Jest를 이용한 add 함수 테스트 코드를 작성해줘”

  • 통합 테스트 시나리오

    • “API 엔드포인트 /login에 대한 통합 테스트 계획을 제안해줘”

  • 테스트 커버리지 개선 아이디어

    • “이 모듈의 경로 커버리지를 높이려면 어떤 테스트가 필요할까?”


5. 코드 리뷰 및 최적화 제안

  • 성능 병목 분석

    • “이 SQL 쿼리가 느린 원인과 인덱스 최적화 방안을 알려줘”

  • 비효율적 로직 리팩터링

    • “이 루프를 더 효율적인 함수형 스타일로 바꿔줄래?”

  • 보안 취약점 점검

    • “이 PHP 코드에서 SQL 인젝션 취약점이 있나?”


6. 새로운 기술 학습 및 예제 생성

  • 라이브러리 사용 예제

    • “Pandas에서 groupby와 pivot 테이블을 사용하는 예제를 보여줘”

  • 비교 분석

    • “Django와 Flask 중 어느 것을 선택해야 할까?”

  • 공식 문서 요약

    • “React 공식 문서에서 useEffect 훅 사용법을 요약해줘”


7. CI/CD 파이프라인 및 DevOps 자동화

  • GitHub Actions 워크플로우 생성

    • “Node.js 프로젝트용 GitHub Actions 워크플로우 YAML을 생성해줘”

  • Dockerfile 최적화

    • “이 Dockerfile을 멀티스테이지 빌드로 최적화해줘”

  • 배포 스크립트 작성

    • “AWS EC2에 배포하는 Bash 스크립트를 작성해줘”


8. 커밋 메시지 작성 및 이슈 템플릿

  • 의미 있는 커밋 메시지

    • “다음 변경 내용을 설명하는 커밋 메시지를 작성해줘: 사용자 로그인 로직 수정, JWT 토큰 방식으로 변경”

  • 이슈 템플릿 자동 생성

    • “버그 리포트용 GitHub 이슈 템플릿을 만들어줘”


결론

ChatGPT는 단순히 대화형 AI를 넘어, 개발 생산성을 높여주는 올인원 도구로 발전했습니다.
코드 스캐폴딩에서부터 디버깅, 테스트, 문서화, DevOps 자동화에 이르기까지 일련의 개발 과정을 ChatGPT와 협업함으로써 더 빠르고, 더 안정적이며, 더 효율적인 소프트웨어를 구현할 수 있습니다.
오늘 바로 ChatGPT를 개발 워크플로우에 통합해 보세요!


이 글이 도움이 되었다면, 댓글과 공유 부탁드립니다!

Loading

28 5월 2025

[인공지능 기술] Gradio 설치 및 실행 방법

[인공지능 기술] Gradio 설치 및 실행 방법

1. Gradio란 무엇인가?


Gradio는 Python으로 개발된 오픈 소스 패키지이다.
Gradio를 사용하면 몇 줄의 코드로 ML 모델, API 또는 임의의 Python 함수에 대해 사용하기 쉽고 커스터마이징할 수 있는 UI 구성 요소를 빠르게 생성할 수 있다.
Gradio GUI를 Jupyter 노트북에 직접 통합하거나 링크로 다른 사람과 공유할 수도 있다.

00 image.png 

2. Gradio 설치


Gradio를 설치하는 방법은 다음과 같다.
터미널에서 다음 명령을 실행하거나 Google Colab에서 실행할 수 있다.

pip install gradio

 Jupyter Notebook을 사용하는 경우에는 다음과 같이 입력한다.

!pip install gradio

 

3. Gradio 애플리케이션을 실행하는 방법


Gradio 애플리케이션을 실행하는 방법을 알아보자.
다음은 사용자의 이름을 입력받아 인사 메시지를 생성하는 간단한 Python 애플리케이션이다.

#!pip install gradio
import gradio as gr

def user_greeting(name):
    return "안녕하세요! " + name + "님, 첫 번째 Gradio 애플리케이션에 오신 것을 환영합니다!????"

app = gr.Interface(fn=user_greeting, inputs="text", outputs="text")
app.launch()

???? 에러 메시지 발생 (ModuleNotFoundError: No module named 'tqdm')

  • 내가 코드를 실행 했을 때는 위와 같은 에러 메시지가 발생 했는데, 에러 메시지에 따르면 gradio 모듈을 찾을 수 없고, gradio 모듈의 일부 파일에서 tqdm 모듈을 찾을 수 없다고 한다.

???? 해결 방법

  • gradio와 tqdm 모듈의 호환성 문제가 있을 수 있기 때문에 gradio와 tqdm 모듈을 최신 버전으로 업데이트 하였다.
    pip install -U gradio
    pip install -U tqdm
    • Gradio 애플리케이션이 실행되었다.

 

명령 프롬프트에서 Gradio 응용 프로그램 실행

Gradio 애플리케이션을 명령 프롬프트에서 실행할 수 있다.
명령 프롬프트에서 다음과 같이 입력한다.

python app.py


애플리케이션을 실행하면 다음의 URL을 열어서 결과를 확인할 수 있다: http://127.0.0.1:7862

  • 이 URL은 각자의 환경에 따라 다를 수 있다.

 

Jupyter Notebook에서 Gradio 애플리케이션 실행

Jupyter Notebook에서 코드를 실행할 수도 있다.
인터페이스를 생성한 후 app.launch()를 사용하여 애플리케이션을 실행할 수 있다.

app = gr.Interface(fn=user_greeting, inputs="text", outputs="text")
app.launch()
  • 이렇게 하면 새로운 위젯이 생성된다.

[출처] Gradio 설치 및 실행 방법

Loading

25 5월 2025

[一日30分 인생승리의 학습법] [Git] 다중 리모트를 사용하여 여러 Git 연동하기(Gitea, GitHub)

post-thumbnail


Git 다중 리모트를 사용하여 Gitea와 GitHub 연동하기

 

한 프로젝트에서 Gitea와 GitHub를 동시에 관리하려면, Git의 다중 리모트(remote) 기능을 사용하면 된다. 다중 리모트를 설정하면, 동일한 로컬 저장소에서 두 개 이상의 원격 저장소로 데이터를 주고받을 수 있게 된다.

여기서 진행할 순서는 다음과 같다:

  1. Gitea와 GitHub 레포지토리 리모트 설정.
  2. 각 리모트를 구분하여 push/pull하는 방법.
  3. 다중 리모트 관리 시 주의사항.

1. 사전 준비: 프로젝트 리포지토리 설정

  • 현재 Gitea의 레포지토리 (wbapp)는 master 브랜치로 연결되어 있다.
    • Gitea의 URL 예시: http://gitea-ip/your-username/app.git
  • GitHub에도 동일한 프로젝트(wbapp)를 만들고, 이를 main 브랜치로 관리하려고 한다.
    • GitHub의 URL 예시: https://github.com/nyaongdev/app.git

먼저 GitHub에 새로운 레포지토리를 생성하고, 여기에 다중 리모트를 설정하도록 하자.


2. 다중 리모트 설정하기

2.1 기존 리모트 상태 확인

로컬 저장소에서 리모트 설정을 확인하려면 터미널이나 명령 프롬프트에서 다음 명령어를 사용한다.


git remote -v

이 명령어를 입력하면 현재 연결된 리모트 목록이 나타난다. 예를 들어:


origin  http://gitea-ip/your-username/app.git (fetch)
origin  http://gitea-ip/your-username/app.git (push)

현재 origin이라는 이름으로 Gitea 리모트가 연결된 상태다.

2.2 GitHub 리모트 추가하기

이제 GitHub 리모트를 추가해야 한다. GitHub 리모트를 추가할 때는 리모트의 이름을 다르게 설정하여, 두 개의 리모트를 구분할 수 있도록 해야 한다. 여기서는 github-nyaong이라는 이름으로 GitHub 리모트를 추가할 것이다.


git remote add github-nyaong https://github.com/nyaongdev/app.git

이제 git remote -v 명령어를 다시 실행하면 다음과 같은 출력이 나올 것이다.


origin         http://gitea-ip/your-username/app.git (fetch)
origin         http://gitea-ip/your-username/app.git (push)
github-nyaong  https://github.com/nyaongdev/app.git (fetch)
github-nyaong  https://github.com/nyaongdev/app.git (push)

이제 origin은 Giteagithub-nyaong은 GitHub를 가리키고 있다.


3. 리모트를 구분하여 Push/Pull 사용하기

이제 각각의 리모트로 push와 pull 작업을 할 수 있는 방법을 살펴보자.

3.1 Gitea와 GitHub에 Push

  • *Gitea (origin)**에 push:
    
    git push origin master
    
  • *GitHub (github-nyaong)**에 push:
    
    git push github-nyaong main

각 리모트를 지정해 브랜치를 푸시(push)할 수 있다. 여기서는 Gitea에는 master 브랜치로, GitHub에는 main 브랜치로 푸시하는 방식이다.

3.2 각각의 리모트에서 Pull

  • *Gitea (origin)**에서 pull:
    
    git pull origin master
  • *GitHub (github-nyaong)**에서 pull:
    
    git pull github-nyaong main

이를 통해 각각의 원격 저장소에서 변경 사항을 로컬 저장소로 가져올 수 있다.

3.3 두 리모트에 동시에 Push하기

Gitea와 GitHub 두 리모트에 동시에 변경 사항을 push하고 싶다면, 두 리모트를 한 번에 지정하여 푸시할 수도 있다.


git push origin master
git push github-nyaong main

이렇게 명령어를 두 번 실행하여 두 곳에 동시에 변경 사항을 적용할 수 있다. 더 자동화하고 싶다면, Git 훅(hook)이나 스크립트를 작성해 한 번의 명령어로 여러 리모트로 푸시하도록 만들 수 있다.


4. 다중 리모트 사용 시 주의사항

4.1 브랜치 관리

  • Gitea에서는 master 브랜치를 사용하고, GitHub에서는 main 브랜치를 사용하는 상황이므로, 브랜치 간의 동기화가 중요하다. 이를 위해 로컬에서 적절히 checkout하고 변경 사항을 푸시해야 한다.
  • 예를 들어, master 브랜치에서 작업한 후 main 브랜치에도 동일하게 반영하려면, 브랜치 병합(merge)을 하거나 리베이스(rebase)를 사용해야 할 수 있다.

# master 브랜치에서 작업 후 main 브랜치로 병합
git checkout main
git merge master
git push github-nyaong main

이와 같이, 각 브랜치가 서로 다르게 유지되지 않도록 주기적으로 병합하여 두 리모트의 코드가 일관되도록 관리하는 것이 좋다.

4.2 충돌 관리

  • 같은 프로젝트를 여러 리모트에 동기화하다 보면, 가끔 충돌(conflict)이 발생할 수 있다. 이 경우, Git은 충돌을 해결해야 푸시할 수 있도록 하며, 이를 해결한 후에 다시 푸시하면 된다.
  • 만약 Gitea와 GitHub 양쪽에서 모두 병렬적으로 작업하고 있다면, 주기적으로 pull을 통해 양쪽의 변경 사항을 확인하고 반영해야 한다.

4.3 협업 시 고려사항

  • 만약 팀원들과 Gitea를 통해 협업하고, 개인적으로 GitHub에도 저장하고 싶다면, Gitea에서 작업한 후 GitHub에 백업하는 형식으로 생각하면 된다.
  • 모든 작업이 Gitea를 기준으로 이루어지고, 완료된 작업을 GitHub에 푸시하는 순서를 정하면 충돌을 줄이고 관리하기 쉽다.

5. 마무리

이제 하나의 프로젝트에서 Gitea와 GitHub 두 리모트를 동시에 관리할 수 있게 되었다. 다중 리모트를 사용하면 하나의 로컬 저장소에서 여러 원격 저장소로 쉽게 데이터를 동기화할 수 있어, 사내의 Git 서버와 외부의 GitHub를 동시에 사용하는 것이 가능해진다.

  • Gitea는 사내 협업을 위한 주요 원격 저장소로 사용하는 형태
  • GitHub는 개인 백업이나 외부 프로젝트 관리용으로 사용하는 형태

[출처] https://velog.io/@nyaong/Git-%EB%8B%A4%EC%A4%91-%EB%A6%AC%EB%AA%A8%ED%8A%B8%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-%EC%97%AC%EB%9F%AC-Git-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0Gitea-GitHub

Loading

25 5월 2025

[chatgpt] [ChatGPT] Function calling

 

 

Function Calling이란?

Chatgpt Chat Completions API를 사용하면, 질문을 하고 답변을 얻을 수 있다.
Function Calling을 사용하면, 질문에 적합한 애플리케이션 함수와 매개변수를 추천받을 수 있다. 

즉, 애플리케이션에서 어떤 함수를 호출하는게 좋을지 gpt에게 물어볼 수 있는 기능이라고 볼 수 있다.

예제코드

open ai에서 가져온 파이썬 예제 코드이다. 한줄한줄 읽어보면, 어떤 방식으로 사용하는 건지 쉽게 감이 온다. 

import openai
import json


# 항상 같은 날씨를 리턴하는 예시용 더미 함수이다. 
# 실제 개발환경에서는 상황에 맞는 코드를 구현해야한다.
def get_current_weather(location, unit="fahrenheit"):
    """Get the current weather in a given location"""
    weather_info = {
        "location": location,
        "temperature": "72",
        "unit": unit,
        "forecast": ["sunny", "windy"],
    }
    return json.dumps(weather_info)


def run_conversation():
    # Step 1: chatgpt에게 질문과 이용할 수 있는 함수 목록을 전달한다. 
    messages = [{"role": "사용자", "content": "서울 날씨는 어때? "}]
    functions = [
        {
            "name": "get_current_weather",
            "description": "위치를 전달하면, 현재 날씨를 알려준다",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "구군시  전달한다. ex. 서울특별시",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        }
    ]
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=messages,
        functions=functions, # 이 곳에서 함수 정보를 전달한다.
        function_call="auto",  
    )
    response_message = response["choices"][0]["message"]

    # Step 2: GPT에서 함수 호출을 하라고 했는지 확인하기 
    if response_message.get("function_call"):
        # Step 3: GPT에서 호출하라고 한 함수를 실제로 호출하기 
        available_functions = {
            "get_current_weather": get_current_weather,
        }  # 이 예제에서는 호출할 수 있는 함수를 1개만 두었지만, 실제로는 여러개를 추가할 수 있다. 
        function_name = response_message["function_call"]["name"] // GPT가 제안한 함수 이름 확인하기 
        fuction_to_call = available_functions[function_name] // GPT가 제안한 함수 할당하기  
        function_args = json.loads(response_message["function_call"]["arguments"])
        function_response = fuction_to_call(
            location=function_args.get("location"),
            unit=function_args.get("unit"),
        ) # GPT가 제안한 함수를 GPT에서 찾은 매개변수로 전달하기 

        # Step 4: 함수 호출로 얻은 결과를 gpt에게 다시 보내주기 send the info on the function call and function response to GPT
        messages.append(response_message)  # API으로 호출받은 값을 확장하기 
        messages.append(
            {
                "role": "function",
                "name": function_name,
                "content": function_response,
            }
        ) 
        second_response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=messages,
        )  # gpt에게 응답 결과 다시 전달하기 
        return second_response


print(run_conversation())

참고

https://platform.openai.com/docs/guides/gpt/function-calling
https://github.com/joshlong/chatgpt-spring-boot-starter
https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb

출처: https://americanopeople.tistory.com/427 [복세편살:티스토리]

Loading

24 5월 2025

[사회과학] [박진영의 사회심리학] ‘내가 싫은 것’ 아는 것도 중요하다

[사회과학] [박진영의 사회심리학] ‘내가 싫은 것’ 아는 것도 중요하다

[박진영의 사회심리학] ‘내가 싫은 것’ 아는 것도 중요하다

입력
게티이미지뱅크 제공

게티이미지뱅크 제공

내가 어떤 사람인지 자신의 다양한 특성을 분명하고 일관적이게 정의할 수 있고 시간과 장소가 바뀌어도 자신이 어떤 사람이라는 느낌을 확실히 가지고 있는 상태를 심리학적 용어로 자기 개념 명확성(self-concept clarity)이 높다고 표현한다.

반대로 자기 개념 명확도가 낮은 사람들은 흔히 자신이 어떤 사람인지 잘 정의하지 못하고 자신의 다양한 모습에 대해 잘 이해하고 받아들이기보다 혼란스러워하는 모습을 보인다. 긍정적인 자기지각인 자존감이 때로는 좋고 때로는 나쁜 결과물들과 관련을 보이는데 어쩌면 자기 개념 명확성이 이를 설명할 수 있다고 보는 학자들이 있다.

예를 들어 자기 자신에 대해 대체로 긍정적으로 생각하고 있지만 자기 개념 명확성이 낮은 사람들의 경우 자존감이 외부의 영향에 의해 크게 좌우되는 반면 자신에 대해 긍정적으로 인식하는 정도는 그다지 높지 않지만 스스로를 잘 알고 있는 사람들의 경우 외부의 영향에 의해 자존감이 흔들리는 정도가 비교적 덜 했다는 연구들이 있다.

필자의 경우 역시 어렸을 때 자연스러운 실제 나의 모습을 잘 파악하고 받아들이기보다 외부에서 좋다고 하는 모습들을 최대한 따라하고 거기에서 오는 보상이나 긍정적인 반응들을 기반으로 자존감을 높이 쌓았던 적이 있다.

예를 들어 매우 내향적인 편이지만 사람들로부터 좋은 반응을 얻기 위해 열심히 외향적인 척을 하고 주변 사람들의 반응이 좋은 편이라면 거기에 기대어 기뻐하고, 반응이 좋지 않다면 위기감을 느끼는 위태로운 시간을 상당히 오래 보낸 것 같다.

이렇게 자기 개념 명확성이 낮으면 외부 자극에 쉽게 흔들리고 영향을 받는 모습을 보인다. 자기 개념 명확성이 낮은 사람들이 자극적인 광고에 더 쉽게 영향을 받고 자신을 과시하기 위한 소비를 한다는 연구 결과도 있었다. 어쩌면 자기 자신을 잘 모르는 사람들이 많은 사회일수록 명품 소비나 유행이 쉽게 번져나가는 것일지도 모르겠다.

최근 연구들에 의하면 자기 개념 명확성이 낮은 것이 ‘자기 통제’에도 부적 영향을 준다고 한다. 통린 장 북경대 심리학자 연구팀에 의하면 자기 개념 명확성이 낮은 사람들의 경우 ‘미래의 자신’을 현재 자신의 연장선으로 보기보다 자신과는 다른 새로운 사람, 마치 타인처럼 바라보는 경향이 높았다.

이런 특성이 자기 개념 명확성이 낮은 사람들이 원하는 목표를 이루기 위해 끈기있게 노력하지 못하는 현상을 일부 설명했다.

내가 어떤 사람인지 아는 것은 장기적으로 내가 원하는 것이나 나에게 바람직한 것이 무엇인지 파악하는 능력, ‘장기적인 비전’을 갖는 것과 관련이 있고 장기적인 비전을 갖지 못하면 끈기있게 노력하는 행동이 저하된다는 것이다.

뭐 하나에 정착하지 못하고 서로 다른 것들을 이것저것 손대기만 하며 오랜 시간 갈아타기만 하는 경우 어쩌면 자기통제력 자체가 낮기보다 자신이 어떤 사람인지 잘 모르는 것이 더 중요한 원인일지도 모르겠다.

물론 다양한 일을 하다 보면 자신이 좋아하는 것과 싫어하는 것을 알게 되고 그 과정에서 자기 개념을 좀 더 명확하게 알게 되기도 한다. 사실 대부분의 사람들이 삶에 걸쳐 다양한 도전과 실패를 통해 자신에 대해 알아간다. 이런 점에서 아무 것도 하지 않기보다는 뭐라도 하는 것이 훨씬 나을 수 있다.

자신이 좋아하는 것을 아는 것 못지 않게 ‘싫어하는 것’을 아는 것 또한 올바른 길을 찾아가는 데 있어 매우 중요하므로 기분 나쁜 경험이나 실패 역시 아무 것도 하지 않는 것 보다는 훨씬 낫다.

살아간다는 것에 대해 내가 좋아하는 것들과 싫어하는 것들에 대한 리스트를 만들어 나가는 과정이라고 한다면 그 어떤 경험도 무의미하지 않을 것이다.

Jiang, T., Wang, T., Poon, K. T., Gaer, W., & Wang, X. (2023). Low self-concept clarity inhibits self-control: The mediating effect of global self-continuity. Personality and Social Psychology Bulletin, 49(11), 1587-1600.

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

Loading