#uri

질문 1
해시태그 없이 키워드만 일치하는 질문은 개수에 포함되지 않아요.

한 달 전 · Luke 님의 질문

What Should I Do Here?

I’m at a point in my career where I’m seriously considering making a switch to a field I’m genuinely passionate about. The problem is it’s not the most financially secure or socially validated option. On the other hand, my current job is stable and pays well, but I don’t feel fulfilled or excited about what I’m doing. I’ve been reading stories about people who took the leap into something they love and ended up thriving, but I also know that not everyone lands on their feet. That makes me hesitate. I have responsibilities and can’t afford to make a reckless decision. So I’m curious how have you personally approached this kind of decision? Have you prioritized your passion or stuck with a practical choice? Or did you find a way to do both? What factors helped you make your decision, and what do you wish you knew earlier? I’d really appreciate any honest insights, lessons learned, or even regrets. I think hearing real experiences from others in the community would help me (and maybe others here too) gain perspective. Thanks in advance!

PM/PO/기획자

#career

답변 0

댓글 0

조회 20

5달 전 · 박정환 님의 새로운 댓글

스프링부트 로컬 환경에서는 되지만, 배포 환경에서 404 에러가 발생합니다.

안녕하십니까 선배님들. 스프링부트 API 서버를 개발하고 배포하였는데 다음과 같은 문제가 발생하였습니다. 로컬 환경에서는 잘 작동하지만, 배포 환경에서 특정 POST 요청에서 404에러가 발생하는 문제였습니다. 해당 요청은 JSON을 반환하는 컨트롤러입니다. 서핑을 하던 중, Spring Security의 CSRF의 문제일 수도 있다고 하던데 저는 현재 Security를 사용하지도 않고 다른 POST 요청은 잘 응답하여 뭐가 원인인지 잘 모르겠습니다. 아래는 application.yaml과 Controller 코드입니다. 감사합니다. // application.yaml spring: application: name: tika servlet: multipart: max-file-size: 50MB max-request-size: 50MB

개발자

#스프링

#자바

답변 1

댓글 2

조회 78

7달 전 · 익명 님의 질문 업데이트

개발자 신입 준비

안녕하세요 개발자 준비중인 컴퓨터공학과 4학년 학생입니다. 우선 저는 3회정도의 프로젝트를 진행했고 어쩌다 보니 팀 프로젝트 였지만 제가 거의 풀 스택으로 진행했고 Spring, Node, React를 사용가능하고 아키텍처적으로 규모가 있진 않지만 대략 30개 이상의 Entity를 가지는 규모의 프로젝트들이며 기업인분들에게 좋은 평가를 받은 프로젝트도 있습니다 (Flutter로 간단한 앱도 만들어보았고 , 어플리케이션 프로젝트도 진행 해보았습니다.) React는 타입스크립트 자바스크립트(JavaScript)를 사용해서 나름 자유자재로 만들고 수정할 수있고 타입스크립트(TypeScript)로 전환하는 방향으로 가고 있으며 Node는 레거시로 Express와 sql사용해서 사용했고 Spring은 Spring Boot, Spring MVC, Spring Security,JPA, Redis, JWT 등으로 다양하게 접목 시키고 있고 왜 필요할까를 생각하며 다양하게 접근하고 있습니다. (JPA나 AOP 등의 깊은 공부도 함께 하고 있습니다.) 실제 서버에 배포도 해보았고 지금 진행중인 프로젝트는 AWS를 통해 여러 인스턴스로 나눠서 최적화 하여 배포해볼 예정입니다. 이렇듯 부족하지만 웹쪽에서는 나름 발전의 자신감이 있는편입니다 하지만 제가 코딩테스트에 준비를 하지못했는데 요즘 코딩테스트가 거의 모든 기업 필수여서 아직 프로젝트 진행중이기도 하고 코딩테스트 때문에 아직 입사지원을 생각하지 못하고 있습니다. 코딩 문제를 한번도 풀어본적 없고 기본문법조차 잘 모르고 그런 상황입니다 ㅜㅜ 막상 시작하려고하니 시간적 압박도 그렇고 어떻게 어느정도의 기간을 잡고 해야할지 막막해서 글올려봅니다 선배님들 현직자분들 저는 웹 관련해서 너무 재밌게 찾아보고 고민하며 작업을 하는데 코딩테스트를 따로 준비해서 내년에 입사를 지원하는게 맞을까요 보통 어느정도가 되어야하고 어느정도 시간이 필요할까요 도움 부탁드립니다. 읽어주셔서 감사합니다!

개발자

#신입

#개발자

#코딩테스트

#취업준비

답변 0

댓글 0

조회 134

7달 전 · aigoia 님의 답변 업데이트

고졸 개발자 취업 고민

안녕하세요. 저는 25살 백엔드 개발자 취업이 목표인 고졸 취준생입니다. 21살에 웹 퍼블리셔로 첫 직장을 다니다 경영 악화로 퇴사 후 다른 직종에서 1년 근무 후 IT 계열에 미련을 버리지 못하고 약 1년 전에 퇴사 후 백엔드 개발자 국비 과정을 수료했습니다. (백엔드를 선택한 이유는 너무 길어질 것 같아 생략하겠습니다.) 6개월의 과정 수료 후 포트폴리오를 다듬고 이력서를 넣기 시작한 지 5개월째 이력서를 넣을 때마다 지원자가 기본 300, 400명씩 되고 연락 오는 곳은 아무 데도 없으니 이 직업으로 밥은 먹고살 수 있을까 싶고 주변에서도 개발자로 취직은 더 이상 힘들지 않겠냐는 말을 자주 듣다 보니 포기하고 빨리 다른 길을 찾아야 하는 건 아닐까 싶고.. 마음이 복잡해서 선배님들의 조언을 구하고자 글 적어봅니다. 백엔드 과정 수강 당시에 HTML, CSS, jQuery, Java, spring boot3, oracle, mySQL을 배웠고 원래도 HTML, CSS, jQuery는 할 줄 알았습니다. 개인 포트폴리오에는 Spring Security를 활용하여 로그인 기능 구현과 게시판 CRUD 구현, AWS 배포한 사이트와 jQuery 프로젝트로 일반 게시판 부분을 AJAX로 XML 문서와 연동하고 각종 화면 단 효과 구현한 사이트, 앱 기획과 화면단 구현 등을 넣었고 취업에 조금이라도 도움이 될까 싶어 수료 후에 정보처리 기능사 자격증 취득하고 학원에서 배운 스프링은 정말 딱 저 정도라(그마저도 사실 구글링해서..) 인프런에서 강의를 보며 스프링 기초부터 다시 공부하고 있습니다. 시작할 때 어려운 길이 될 거라는 예상은 했었지만 과정 수료 후 5개월, 퇴사는 1년이 넘어가니 점점 불안감이 생깁니다.. 이 길을 계속 이어가도 될까요? 오래 걸려도 계속해도 될까요? 계속 이어간다면 어떤 것들을 더 채워야 좋을까요?? 그냥 가망이 없는 것 같다면.. 솔직하게 말해주셔도 괜찮습니다. 불안하고 답답한 마음에 새벽에 작성하는 글이라 조금 두서가 없을 수도 있겠지만 긴 글 읽어주신 분들 감사합니다.

개발자

#고졸신입

#웹개발자

#취업고민

#취업

#백엔드

답변 1

댓글 0

조회 319

9달 전 · 노원재 님의 답변 업데이트

ReactNative ios build 에러 3일째 해결을 못했습니다.

시뮬레이션을 실행하려고 해도 스크립트 문제, iPhone 버전 범위 문제, 시뮬레이터 문제가 계속 발생합니다. 어떤 도움이라도 감사합니다. ReactNative를 처음 접했습니다. 저희 팀에서 저를 도울 수 있는 사람이 없습니다. #프로젝트 환경 mac M2 ruby -v ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23] node -v v20.10.0 pod --version 1.15.2 package.json { "name": "labts", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "lint": "eslint .", "start": "react-native start", "test": "jest" }, "dependencies": { "@react-native-community/async-storage": "^1.12.1", "@react-native-community/cli": "13.6.9", "@react-navigation/bottom-tabs": "^6.6.0", "@react-navigation/native": "^6.1.17", "@react-navigation/native-stack": "^6.10.0", "@tanstack/react-query": "^5.51.5", "@types/react-native-vector-icons": "^6.4.18", "axios": "^1.7.2", "date-fns": "^3.6.0", "immer": "^10.1.1", "react": "18.2.0", "react-native": "0.74.3", "react-native-calendars": "^1.1305.0", "react-native-date-picker": "^5.0.4", "react-native-dotenv": "^3.4.11", "react-native-get-random-values": "^1.11.0", "react-native-image-crop-picker": "^0.41.2", "react-native-image-zoom-viewer": "^3.0.1", "react-native-paper": "^5.12.3", "react-native-permissions": "^4.1.5", "react-native-safe-area-context": "^4.10.8", "react-native-screens": "^3.32.0", "react-native-splash-screen": "^3.3.0", "react-native-tab-view": "^3.5.2", "react-native-vector-icons": "^10.1.0", "react-native-vision-camera": "^4.5.1", "uuid": "^10.0.0", "yarn": "^1.22.22" }, "devDependencies": { "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", "@react-native/babel-preset": "0.74.85", "@react-native/eslint-config": "0.74.85", "@react-native/metro-config": "0.74.85", "@react-native/typescript-config": "0.74.85", "@types/react": "^18.2.6", "@types/react-native-dotenv": "^0.2.2", "@types/react-test-renderer": "^18.0.0", "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "^5.0.2", "eslint": "^8.19.0", "jest": "^29.6.3", "prettier": "2.8.8", "react-test-renderer": "18.2.0", "typescript": "5.0.4" }, "engines": { "node": ">=18" } } PodFile require Pod::Executable.execute_command('node', ['-p', 'require.resolve( "react-native/scripts/react_native_pods.rb", {paths: [process.argv[1]]}, )', __dir__]).strip platform :ios, '12.0' use_frameworks! #use_modular_headers! prepare_react_native_project! linkage = ENV['USE_FRAMEWORKS'] if linkage != nil Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green use_frameworks! :linkage => linkage.to_sym end target 'nexlabts' do config = use_native_modules! use_react_native!( :path => config[:reactNativePath], # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) target 'nexlabtsTests' do inherit! :complete # Pods for testing end post_install do |installer| # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( installer, config[:reactNativePath], :mac_catalyst_enabled => false, # :ccache_enabled => true ) end end 제가 아래 에러 3가지에 대해 제가 해본 방법들입니다. 1. node 재설치 node_module 폴더 삭제, package-rock.json 삭제 후 재설치 npm install --legacy-peer-deps yarn install 2. Xcode가 node 읽을 수 있도록 설정 sudo ln -s "$(which node)" /usr/local/bin/node 3. Podfile 내 platform 설정 수정 platform :ios, '12.0' or platform :ios, '14.0' 4. Pods 재설치 rm -rf ~/Library/Developer/Xcode/DerivedData or rm -rf ~/Library/Developer/Xcode/DerivedData/* rm -rf Pods rm Podfile.lock pod install --repo-update Xcode \> Product \> Clean Build Folder. cd ./ios pod cache clean -all pod install --repo-update cd ../ npx react-native run-ios --no-packager --simulator="iPhone 15" or npx react-native run-ios --simulator="iPhone 15" or yarn start > i(run ios) Err 1. cocoaPods 설치할 때 [!] CocoaPods could not find compatible versions for pod "React-RuntimeHermes": In Podfile: React-RuntimeHermes (from ../node_modules/react-native/ReactCommon/react/runtime) Specs satisfying the React-RuntimeHermes (from ../node_modules/react-native/ReactCommon/react/runtime) dependency were found, but they required a higher minimum deployment target. Err2. iOS 실행할때 run-ios --no-packager --simulator="iPhone 15" Build description signature: fc1341421f84b87c5245d346c2c17b66 Build description path: /Users/nowonjae/Library/Developer/Xcode/DerivedData/nexlabts-argvodqcybjfcybstpulfpghnzvm/Build/Intermediates.noindex/XCBuildData/fc1341421f84b87c5245d346c2c17b66.xcbuilddata /Users/nowonjae/Desktop/project/NeXLabRN/ios/nexlabts.xcodeproj:1:1: error: Unable to open base configuration reference file '/Users/nowonjae/Desktop/project/NeXLabRN/ios/Pods/Target Support Files/Pods-nexlabts/Pods-nexlabts.release.xcconfig'. (in target 'nexlabts' from project 'nexlabts') warning: Unable to read contents of XCFileList '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Unable to read contents of XCFileList '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-input-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-frameworks-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase 'Bundle React Native code and images' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase '[CP] Embed Pods Frameworks' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-input-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') error: Unable to load contents of file list: '/Target Support Files/Pods-nexlabts/Pods-nexlabts-resources-Release-output-files.xcfilelist' (in target 'nexlabts' from project 'nexlabts') warning: Run script build phase '[CP] Copy Pods Resources' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase. (in target 'nexlabts' from project 'nexlabts') --- xcodebuild: WARNING: Using the first of multiple matching destinations: { platform:iOS Simulator, id:B5AA2E84-4F83-4749-A986-A1FCE5E398A3, OS:17.5, name:iPhone 15 } { platform:iOS Simulator, id:B5AA2E84-4F83-4749-A986-A1FCE5E398A3, OS:17.5, name:iPhone 15 } ** BUILD FAILED ** ] Err3. Xcode 로 Build 할때 (Any iOS Simulator Device (arm64, x86_64)) Command PhaseScriptExecution failed with a nonzero exit code

개발자

#reactnative

#xcode

#reactnative-run-ios

답변 1

댓글 0

조회 553

10달 전 · 프레드윰 님의 새로운 답변

중국 유학생이 한국에서 Java 개발 직업을 찾으려면 어떻게 해야 하나요?

안녕하세요, 저는 중국에서 온 유학생입니다. 25년 2월에 졸업 예정입니다. 한국에서 Java 백엔드 개발자 직업을 찾고 싶습니다. 현재 개인적으로 진행한 프로젝트가 두 가지 있습니다. 프로젝트 1: Hash 해시 알고리즘을 기반으로 한 데이터베이스 라우팅 컴포넌트 프로젝트. 사용한 기술 스택: Springboot, MySQL, ThreadLocal, Mybatis, AOP 어노테이션. 프로젝트 2: 커뮤니케이션 플랫폼 시스템. 사용한 기술 스택: Springboot, Redis, Kafka, MySQL, ElasticSearch, Spring Security. 이 프로젝트들이 한국의 Java 개발 직무와 부합할까요?

개발자

#java

#springboot

#kafka

#신입-개발자

#개발자

답변 1

댓글 0

조회 96

10달 전 · 김인후 님의 새로운 답변

spring security에서 JWT를 사용할 때 질문이 있습니다.

SecurityConfig에서 .requestMatchers(HttpMethod.GET, "/boards/*/comments").permitAll() 이런 식으로 허용을 해주고 JwtAuthorizationFilter에서 accessToken이 유효하지 않으면 response에 토큰에 문제가 생겼다는 에러 메세지를 리턴을 하게 해뒀습니다. GET /boards/*/comments 요청을 보내면 해당 게시물의 댓글들을 조회를 해올 때 좋아요를 누른 상태인지 누르지 않은 상태인지 구분을 할때 문제가 생겼습니다. 로그인을 한 사용자는 댓글들을 조회할 때 좋아요를 눌렀나 안눌렀나 확인을 해야하고 로그인을 하지 않은 사용자는 무조건 좋아요를 안 누른 상태로 해야되는데 JwtAuthorizationFilter에서 에러 메세지를 리턴을 하되면 로그인을 해야지만 조회가 되는 문제가 생기고 JwtAuthorizationFilter에서 에러 메세지를 리턴하는 코드를 빼자니 모든 Controller쪽에서 null체크를 해줘야 하고... 감을 못잡겠습니다ㅜ_ㅜ

개발자

#java

#spring

답변 1

댓글 0

조회 69

일 년 전 · Booting 님의 질문

리액트네이티브 웹뷰에서 카카오 로그인 관련 질문드려요

안녕하세요. 웹 개발자여서 리액트 네이티브 cli로 웹뷰만 했을 뿐 아무것도 모릅니다.ㅜㅜ 원인: 웹뷰에서 카카오 로그인을 붙였습니다. 하지만 안드로이드에서 카카오 로그인이 되지 않습니다. 이유를 찾아보니 카카오 개발자 문서에 https://developers.kakao.com/docs/latest/ko/javascript/hybrid 안드로이드는 따로 뭘 해줘야 한다고 합니다. 'JavaScript SDK가 카카오톡 실행을 위한 Intent URI를 생성해 호출합니다. 웹뷰에서는 WebViewClient#shouldOverrideUrlLoading 메서드를 오버라이딩(Override)하여 Intent를 파싱(Parsing)하고, 해당 Activity를 실행해야 합니다.' 하지만 저것을 어디에 오바라이딩 해야하는건지 전혀 모르겠습니다. 도와주세요

개발자

#react-native

답변 0

댓글 0

조회 273

일 년 전 · 익명 님의 질문

Next.js 에서 fluent-ffmpeg 사용 시 에러 해결 가능할까요?

Next.js 에서 puppeteer를 사용해서 특정 url에 접속하여 애니메이션을 png로 100장 정도 캡처하여 생성하고, fluent-ffmpeg를 사용해서 해당 png 이미지들을 mp4 영상으로 만들려고 하는데요. yarn add puppeteer fluent-ffmpeg @ffmpeg-installer/ffmpeg yarn add --dev @types/fluent-ffmpeg 위와 같이 라이브러리들을 설치했구요. 아래 page.tsx 파일에서 코드를 구현했는데요. dev로 실행해서 해당 페이지에 접속을 하면 아래와 같은 에러가 발생하는데요. 해결이 가능할까요?? 다른 라이브러리를 써야할지 구현한 코드가 문제가 있는지 모르겠네요. 도움 부탁드립니다!! # 에러 코드 # 1 of 1 error Next.js (14.2.3) Server Error Error: Cannot find module '/Users/.../animation-capture/node_modules/@ffmpeg-installer/darwin-arm64/package.json' This error happened while generating the page. Any console logs will be displayed in the terminal window. Call Stack webpackEmptyContext file:///Users/.../animation-capture/.next/server/app/capture/page.js (22:10) eval node_modules/@ffmpeg-installer/ffmpeg/index.js (40:27) (rsc)/./node_modules/@ffmpeg-installer/ffmpeg/index.js file:///Users/.../animation-capture/.next/server/vendor-chunks/@ffmpeg-installer.js (20:1) Next.js eval /./src/app/capture/page.tsx (rsc)/./src/app/capture/page.tsx file:///Users/.../animation-capture/.next/server/app/capture/page.js (286:1) Next.js # 코드 구현부 # import { NextApiRequest, NextApiResponse } from 'next'; import puppeteer from 'puppeteer'; import fs from 'fs'; import path from 'path'; import ffmpeg from 'fluent-ffmpeg'; import ffmpegInstaller from '@ffmpeg-installer/ffmpeg'; ffmpeg.setFfmpegPath(ffmpegInstaller.path); .... 중략.... const outputFilePath = path.resolve("./screenshots/video.mp4"); ffmpeg() .addInput(`${folderPath}/screenshot-%d.png`) .inputFPS(10) .output(outputFilePath) .on("end", () => { res.status(200).send(`Video created successfully at ${outputFilePath}`); }) .on("error", (err) => { console.error("Error generating video:", err); res.status(500).send("Failed to generate video"); }) .run(); } catch (error) { console.error("Error capturing screenshots:", error); res.status(500).send("Failed to capture screenshots"); }

개발자

#next.js

#fluent-ffmpeg

#mp4

답변 0

댓글 0

조회 99

일 년 전 · 승주 님의 새로운 답변

springsecurity session & JWT 동시사용 질문

안녕하세요 session과 jwt의 동시사용에 대하여 질문을 드리려고 합니다. session은 서버의 자원을 점유한다는 점에서 jwt를 사용한다고 알고 있습니다. 하지만 보안이 중요시되는 사이트라면 jwt랑 sesison을 같이 사용해도 괜찮을까요? 아직 대학생이라 이것저것 해보고 싶은 마음에 session id를 jwt에 넣어 사용해보려고합니다. MVC와 WEBFLUX 두가지방법으로 구현해서 비교해보려고하는데 괜찮은 프로젝트가 될지 아니면 그냥 삽질일지 판단을 못하겠어서 질문 드립니다.

투표

개발자

#spring-security

#session

#jwt

#mvc

#flux

답변 2

댓글 0

조회 311

일 년 전 · 익명 님의 새로운 댓글

SpringBoot와 MySQL 도커 배포 과정에서 계속 오류가 발생합니다.

선배님들 안녕하십니까? 제목 그대로 스프링부트와 MySQL 배포 과정에서 HikariPool-1 - Exception during pool initialization. server-1 | server-1 | java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. 위와 같은 오류가 발생합니다. MySQL은 정상적으로 배포가 되어서 접근이 가능한 것을 확인했습니다. 하지만, SpringBoot의 경우, 계속 DB와 연결이 실패합니다. 아래는 SpringBoot의 application.properties 파일과 docker-compose.yml 파일입니다. 한 수 가르쳐주셨으면 합니다. 감사합니다. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=${SPRING_DATASOURCE_URL} spring.datasource.username=${SPRING_DATASOURCE_USERNAME} spring.datasource.password=${SPRING_DATASOURCE_PASSWORD} spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.format_sql=true

개발자

#오류

#스프링부트

#도커

#mysql

답변 1

댓글 3

조회 395

일 년 전 · 신예찬 님의 새로운 댓글

RCE 보안공격 질문입니다!

안녕하세요 백엔드 취업 준비생입니다 최근 프로젝트를 진행중에 배포서버를 구성해봤습니다 aws ec2에 docker compose로 nginx, WAS, redis를 컨테이너화해 동작시키고, nginx에 의해 3개의 WAS가 로드밸런싱 된 상태입니다(WAS 는 sping boot+spring security+JPA를 사용중입니다) route 53으로 Gabia에서 구매한 도메인을 연결해둬 도메인 접근을 허용해둔 상태입니다 배포 서버가 정상적으로 동작하는지 확인하기 위해 log를 보고 있었는데 이상한 요청이 보였습니다 요청 url에 `chmod 777`이라던지 `rm -rf`가 보여서 식겁해서 일단 서버는 내려뒀습니다 알아보니 RCE라는 공격 방식 같더라고요 그래서 RCE를 막는 최선의 방법이 무엇인지 궁금합니다 또 통상적으로 알고있으면 좋은 보안 방어 기법에는 어떤것들이 있을지 궁금합니다! (가능하면 AWS 과금이 없는방법이면 더 좋을거같아요 😊 😊)

개발자

#nginx

#security

#springboot

#aws-ec2

답변 1

댓글 1

조회 91

일 년 전 · 이양일 님의 새로운 답변

스프링부트 ServiceInterface에 요청문 작성

안녕하세요 MSA아키텍처를 적용한 개인프로젝트 진행중에 궁금한 사항이 생겨서 글 작성합니다 회원정보 수정을 한 뒤 수정이 정상적으로 완료되었을 때 클라이언트에 완료되었다는 메세지와 함께 로그아웃 메서드를 실행시키고 싶어서 public interface IUserInfoService { @PostMapping(value = "security/v1/logout") void logout(); } 이렇게 서비스 인터페이스에 작성을 해두고 컨트롤러에서 userInfoService.logout(); 으로 호출하여 실행하는데 권장되는 방법인지, 더 좋은 방법이 있는지 궁금해서 질문드립니다

개발자

#springboot

#java

#spring-security

#msa

답변 1

댓글 0

추천해요 1

조회 335

일 년 전 · 김도원 님의 답변 업데이트

퇴사한지 반년 넘은 3년차 java 개발자 입니다..

전 회사에서 크롤링으로 혹사당한 후 대상포진까지 걸리고 더는 안되겠다 싶어 퇴사하고 3개월정도 휴식기를 가지고 3개월째 준비하고 있습니다. 총 반년.. 사이드프로젝트도 계속 만들고 있는데 어디까지 손봐야 하는지 감이 잡히지 않습니다.. 코딩테스트는 사실상 준비하지 않아서 과제테스트를 보는 곳으로 생각하고 있는데 3년차로 들어가게 된다면 어떤 것을 해야하는지 혼란합니다. 현재는 spring security, jwt, oauth2 를 이용해 로그인 기능을 구현해 놓은 상태에 docker, aws, jenkins를 이용해 서버에 올리는 정도까지만 진행한 상태입니다.. 찾아보니 redis, kafka 같은 것들도 해야 할 것만 같은데 시간이 없는 상태에서 진행하는게 맞을까요? 테스트코드도 습관이 되어 있지 않아서 혼자서 작성하려니 너무 벅찬 느낌이 듭니다.. 현재하고 있는 것에서 마무리하고 구직을 해도 상관없을지, 더 배우고 채워야 할지 모르겠습니다,,

개발자

#이직

#java

#백앤드

#3년차

답변 5

댓글 6

추천해요 10

조회 3,723

일 년 전 · 익명 님의 질문 업데이트

인공지능 대학원 생각중인데 도와주세요!

컴공 전공생입니다. 코드짜서 프로젝트에 참여하고 개발하는 것보단 학과 공부가 더 편하고 흥미가 있어서요. 인공지능 쪽(정확한 분야 설정 X, 이제 공부시작)으로 대학원 생각중이여서 올해부터 머신러닝 스터디에 참여하고 있어요 혹시 벡엔드 지식이 있어야할까요? http, jpa, spring security, jwt, aws, ci/cd를 공부하는 스터디가 있어서 참여해야할지 고민됩니다 많은 조언 부탁드립니다!!

개발자

#인공지능

#대학원

답변 2

댓글 0

조회 213

일 년 전 · 손우진 님의 새로운 답변

Spring Cloud Config 서버에 관하여 질문이 있습니다.

MSA 아키텍처에서는 대개 환경 정보를 일괄적으로 관리하는 서버를 두는 것으로 알고 있습니다.(Cloud Native 12 Factors) 그 중에서 Spring에서 사용할 수 있는 것은 Spring Cloud Config Server입니다. 해당 컨피그 서버를 사용하면 효율적으로 application.yml를 관리할 수 있죠.. 그런데 여기까지는 좋습니다만 제 지식으로는 해결할 수 없는 문제가 발생했습니다. Github Actions CI/CD에서 빌드를 할 때 application.yml이 없어도 되지만 빌드 검증을 위해선 필요합니다. 그런데 이때 Config Server를 외부 포트로 열어놓고 Github actions 접속시 비보안적이지 않나요..? 그래서 Spring Basic Auth를 사용하여 접근하려 했지만 왜인지 모르게 오류가 계속 뜹니다. (몇 시간 동안 해봤지만 안됩니다.. 충돌 때문인지는 모르겠지만 그냥 Security 관련 Bean이 설정이 안되더라구요..) 관련해서 AWS를 활용하여 일회성 인증을 하는 방법이 있다고 합니다만.. 이것만이 방법은 아닐 거 같습니다. 에이 몰라! Config Server 외부 포트 열어놓는건 위험하니까 그냥 Github actions secrets에도 application.yml를 다 넣고 빌드 검증해보고, 실제 배포때는 Dockerfile로 프로파일 설정해서 Config Server에서 불러와야지! 라고 하기에는 그럼 application.yml이 수정될 때 마다 github actions, config server 둘다에서 수정해줘야 할 것 같습니다… 관련하여 조언 주시면 감사하겠습니다.

개발자

#spring

#spring-cloud

#spring-cloud-config

#msa

답변 1

댓글 0

조회 80

일 년 전 · 익명 님의 새로운 댓글

프론트에서 세션으로 로그인 유지 하려는 과정 중 문제가 생겼습니다.

안녕하세요 현재 제가 백엔드(스프링)를 진행하고 있고, 지인이 프론트를 진행하고 있습니다. JWT를 진행하기 전 세션을 통해서 로그인을 해보려고 합니다. 결론부터 말씀 드리자면 쿠키값에 세션id가 저장이 안되어 로그인 유지가 안되는 상황입니다. 사용하고 있는 로그인 방식은 Spring Security FormLogin 방식입니다. 복잡하게지만 백엔드 쪽에서의 문제인지 코드를 한 번 올려드리겠습니다. 생각 1. 인텔리제이 내에서 html을 등록하여 진행하면 같은 도메인, 포트이기 때문에 시큐리티가 자동으로 세션을 만들고 그 세션을 통해 자동으로 유지된다고 생각합니다. 생각2. 하지만, 프론트, 백엔드 서버 포트가 다르기에 successHandler을 통해서 쿠키에 세션ID를 담아서 보내야 된다고 생각했습니다. 하지만, 세션ID는 유지가 되지 않고, 그것에 대해 계속 알아보던 중 해결책을 못찾아 질문을 드립니다. 프론트단에서 따로 처리를 해야되는 걸까요? 아니면 제가 제대로 설정을 못하고 있는 것일까요

개발자

#spring

#프론트

#백엔드

#세션

#session

답변 1

댓글 4

조회 267

일 년 전 · 백승훈 님의 댓글 업데이트

Nginx, Express 연결 후 프론트에서 이미지 파일 전송시 408 Error

안녕하세요. 혼자 해보던 도중 도저히 해결이 되지 않아 문의드립니다. - 서버 설계 - 현재 저는 Express앱을 AWS EC2 인스턴스에 NGINX를 설치한 후 proxy_pass에 express앱이 구동중인 port를 연결하여 사용하고 있습니다. 이 과정에서 ALB를 통해 ACM을 연동하여 HTTPS 프로토콜이 사용가능하게 설정까지 하였습니다. 이미지 파일업로드는 multer-s3를 이용해 s3버킷과 연결하여 업로드 되는 방식입니다. - 문제상황 - 로그인과 기본적인 CRUD는 문제없이 되는데, 프론트에서 이미지 파일(multipart/form-data)을 서버로 전송하면 504 오류가 출력됩니다. 1. nginx의 access.log에는 해당 uri의 상태코드가 408이라 출력됩니다. 2. nginx의 error.log에는 readv() failed (104: Connection reset by peer) while reading upstream가 출력됩니다. 3. 개발자도구의 console창에 'server의 이미지 업로드 uri' from origin '프론트 도메인'이 has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 이라 출력됩니다. 위 오류를 해결해보기 위해 시도해본 것은 아래와 같습니다 1. NGINX의 proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout, send_timeout을 600으로 설정, client_max_body_size를 500M으로 설정 2. ALB의 유휴제한시간 600 설정 3. Express 앱에 app.set('trust proxy', true); 추가 4. Express-session에 app.use(session({proxy:true})) 추가 5. body-parser에 app.use(bodyParser.json({limit: '1000mb'})); 추가 및 app.use(bodyParser.urlencoded({limit: '1000mb', extended: true})); 추가 6. 업로드되는 uri의 미들웨어에 (req, res, next) => { req.setTimeout(1000000); next(); } 추가 7. upload.single()미들웨어를 주석처리 후 req.file 출력 시도 아직도 해결을 하지 못하였습니다 ㅜㅜ 연휴임에도 도와주시면 너무 감사하겠습니다..

개발자

#aws

#alb

#nginx

#express

#ec2

답변 2

댓글 4

조회 315

일 년 전 · 다형 님의 답변 업데이트

aws spring boot 배포 오류

안녕하세요 백엔드 공부 중인 학생입니다. aws ec2로 Spring boot 프로젝트를 배포 시도 중에 있습니다. (maven, java 8, jar) java -jar jar파일명.jar 명령어로 배포 시도 중에 에러메세지가 도저히 해결이 안되어서 도움 요청드립니다.. 도와주신다면 감사하겠습니다.. 아 참고로 rds로 데이터베이스 생성하지 않고 mysql(workbench)로 데이터베이스 생성했습니다 <오류메세지> Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-02-07 04:33:35.742 ERROR 31012 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.22.jar!/:5.3.22] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_392] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) [spring-boot-2.7.2.jar!/:2.7.2] at com.se.social.SocialApplication.main(SocialApplication.java:13) [classes!/:0.0.1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_392] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_392] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_392] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_392] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:229) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.22.jar!/:5.3.22] ... 22 common frames omitted Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed at org.apache.catalina.core.StandardService.addConnector(StandardService.java:238) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) ~[spring-boot-2.7.2.jar!/:2.7.2] ... 24 common frames omitted Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1077) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.core.StandardService.addConnector(StandardService.java:234) ~[tomcat-embed-core-9.0.65.jar!/:na] ... 26 common frames omitted Caused by: java.net.SocketException: Permission denied at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_392] at sun.nio.ch.Net.bind(Net.java:461) ~[na:1.8.0_392] at sun.nio.ch.Net.bind(Net.java:453) ~[na:1.8.0_392] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) ~[na:1.8.0_392] at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:275) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:230) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1227) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1313) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:614) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1074) ~[tomcat-embed-core-9.0.65.jar!/:na] ... 28 common frames omitted <전체> . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.2) 2024-02-07 04:33:27.975 INFO 31012 --- [ main] com.se.social.SocialApplication : Starting SocialApplication v0.0.1-SNAPSHOT using Java 1.8.0_392 on ip-172-31-39-15 with PID 31012 (/home/ubuntu/socialboardPJ/target/social-0.0.1-SNAPSHOT.jar started by ubuntu in /home/ubuntu/socialboardPJ/target) 2024-02-07 04:33:27.980 INFO 31012 --- [ main] com.se.social.SocialApplication : No active profile set, falling back to 1 default profile: "default" 2024-02-07 04:33:29.591 INFO 31012 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2024-02-07 04:33:29.681 INFO 31012 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 76 ms. Found 1 JPA repository interfaces. 2024-02-07 04:33:30.960 INFO 31012 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 80 (http) 2024-02-07 04:33:30.986 INFO 31012 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-02-07 04:33:30.987 INFO 31012 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65] 2024-02-07 04:33:31.641 INFO 31012 --- [ main] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2024-02-07 04:33:31.880 INFO 31012 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-02-07 04:33:31.880 INFO 31012 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3717 ms 2024-02-07 04:33:32.215 INFO 31012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2024-02-07 04:33:32.569 INFO 31012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2024-02-07 04:33:32.659 INFO 31012 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2024-02-07 04:33:32.822 INFO 31012 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.10.Final 2024-02-07 04:33:33.157 INFO 31012 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2024-02-07 04:33:33.383 INFO 31012 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect 2024-02-07 04:33:34.255 INFO 31012 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2024-02-07 04:33:34.266 INFO 31012 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-02-07 04:33:34.906 WARN 31012 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2024-02-07 04:33:35.616 WARN 31012 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server 2024-02-07 04:33:35.620 INFO 31012 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 2024-02-07 04:33:35.624 INFO 31012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2024-02-07 04:33:35.646 INFO 31012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. 2024-02-07 04:33:35.650 INFO 31012 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2024-02-07 04:33:35.676 INFO 31012 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2024-02-07 04:33:35.742 ERROR 31012 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.22.jar!/:5.3.22] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_392] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.22.jar!/:5.3.22] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) [spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) [spring-boot-2.7.2.jar!/:2.7.2] at com.se.social.SocialApplication.main(SocialApplication.java:13) [classes!/:0.0.1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_392] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_392] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_392] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_392] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) [social-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:229) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.22.jar!/:5.3.22] ... 22 common frames omitted Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed at org.apache.catalina.core.StandardService.addConnector(StandardService.java:238) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) ~[spring-boot-2.7.2.jar!/:2.7.2] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) ~[spring-boot-2.7.2.jar!/:2.7.2] ... 24 common frames omitted Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1077) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.core.StandardService.addConnector(StandardService.java:234) ~[tomcat-embed-core-9.0.65.jar!/:na] ... 26 common frames omitted Caused by: java.net.SocketException: Permission denied at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_392] at sun.nio.ch.Net.bind(Net.java:461) ~[na:1.8.0_392] at sun.nio.ch.Net.bind(Net.java:453) ~[na:1.8.0_392] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222) ~[na:1.8.0_392] at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:275) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:230) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1227) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1313) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:614) ~[tomcat-embed-core-9.0.65.jar!/:na] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1074) ~[tomcat-embed-core-9.0.65.jar!/:na] ... 28 common frames omitted

개발자

#aws

#springboot

#배포

답변 1

댓글 0

조회 614

일 년 전 · 유현명 님의 답변 업데이트

신입 고졸 개발자에게 필요한 것이 궁금합니다

저는 이제 25인 된 고졸 개발자입니다 제가 부족한 부분과 더 배워야하는 것 그리고 제 기술로 취업이 가능한지 궁금합니다 제가 사용가능한 기술은 언어 : JAVA, Python, C, html, Javascript 프레임워크 : Spring, Django, Swing DB : Oracle, Mysql, hibernate, JPA 기타 : Spring Security, OOP, gradle.build(kts), Ajax, Aws, Liunx(centOs7, ubuntu) 위 내용정도 프로젝트에 사용해 보았습니다

개발자

#java

#개발

#신입

#고졸

답변 2

댓글 0

조회 261

일 년 전 · 상연 님의 새로운 댓글

브라우저 API KEY 노출 관련

안녕하세요 프론트엔드 개발자 취업을 준비 중인 취준생입니다 다름이 아니라 프로젝트를 진행함에 있어 궁금증이 생겼는데 생각보다 답을 찾기가 어려운 것 같아 질문 올려 봅니다 오어스나 지도, open ai 등의 api를 사용할 때, 개발자도구 네트워크 란에 들어가니까 api키가 쉽게 노출되더라구요 인증 토큰까지야 어치피 자신의 것이 노출된다고 생각하긴 하는데 api key나 다른 시크릿 키 등은 위험할 수도 있겠단 생각이 들었습니다 env가 생각보다 쉽게 노출되기 때문에 보안에 중요한 부분은 넣지 않아야 한다고 들었습니다만 위와 같은 경우, 브라우저에서 키를 보이지 않게 하는 방법이 어떤 게 있을까 해서 여쭤봅니다 조금 찾아 봤더니 사실 플랫폼 도메인과 redirect uri 같은 것을 등록하기 때문에 외부 오리진에서 api 키를 이용하는 것은 막혀 있다고 알고 있긴 한데 이렇게 잘 구성되어 있지 않은 부분이 있을 수도 있고, 말 그대로 민감한 정보가 노출될 수도 있다고 생각해서 가릴 수 있는 방법을 알고 싶습니다 FE는 ts vite react에 배포는 vercel로 진행했고 환경 변수는 버셀 프로젝트 세팅 환경 변수에 넣었습니다

개발자

#env

#브라우저

#api

#보안

답변 1

댓글 1

조회 300

일 년 전 · 오원종(Owen) 님의 새로운 답변

안녕하세요. 신입 8개월차입니다.

나이는 33살, 비전공 초대졸입니다. 23년 3월 국비 수료 후 5월 입사해서 8개월차 웹개발자로 일하고있습니다. 연봉은 2800이고 중소기업이라 백엔드/프론트엔드 구분없이 바닐라js, jQuery, spring boot, JPA, mariaDB 환경에서 사수 도움없이 입사동기와 프로젝트 한 개를 완성시켰습니다. jwt토큰과 Spring Security 사용하여 로그인 구현, 동시성 이슈 해결, 자세히는 말하지 못하지만 이외에도 기본적으로 필요한 기능들과 핵심기능들을 개발하였습니다. (준공공기관 사업) 또한, 개발 진행하면서 스프링 레거시로 유지보수 및 간단한 기능개선을 위한 소소한 개발을 했습니다. 곧 5월이 되면 1년차이기도하고 내년 상반기에만 제가 메인 개발자로 홀로 프로젝트를 2~3개 진행하게 될 것 같은데 2800이라는 연봉에 비해서 책임이 큰 것 같아 고민입니다. 어찌됐건 1년은 꽉채울거지만….연봉협상 때는 얼마를 불러야 할까요? 전 최소 3300정도를 생각하고 있는데…적당할까요? 만일 회사에서 3000을 준다하면 이직을 해야할지도 고민됩니다. 현재 일은 많으나 사수가 없어서 좋은 코드에 대한 고민도 못하고 굴러가게만 하는 데에 집중해서 얼레벌레코딩중이라서 ㅜㅜ 배울 점도 없어보입니다….

개발자

#신입연봉

답변 1

댓글 0

조회 999

2년 전 · 손우진 님의 새로운 답변

nextauth 를 이용해 springboot 의 jwt를 받아와서 로그인을 구현중입니다.

안녕하세요. nextauth 를 이용해 로그인 구현중입니다. 흔히 생각하는 소셜 로그인이 아닌 username 과 password를 통해 springboot security 에서 jwt를 반환 받아오려고 합니다. // app/api/auth/[...nextauth]/route.ts CredentialsProvider({ name: 'Credentials', credentials: { username: { label: 'Username', type: 'text', placeholder: '아이디' }, password: { label: 'Password', type: 'password' }, }, async authorize(credentials, req) { const res = await fetch(`${process.env.NEXTAUTH_URL}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: credentials?.username, password: credentials?.password, }), }); const user = await res.json(); console.log(user); if (user) { return user; } else { return null; } }, }), 그런데 위의 코드처럼 코드를 구성했을때 .env.local 파일의 NEXTAUTH_URL 이 등록이 되면 authorize 가 작동하지 않습니다 . 에러 log라도 있으면 어떻게라도 해보겠는데.. 그것도 없습니다. 그래서 NEXTAUTH_URL 를 등록하지 않고 const res = await fetch(`http://localhost:8080/auth`, 바꾸면 이것역시 에러 log 없이 브라우저상에서 Error 라는 문구만 보여줍니다. 이렇게 생각했을때 authorize는 값을 내부에서만 가져올수 있는거 같은데요. 실제로 가상의 const user = {....} 를 만들어서 반환하면 로그인이 아주 잘 됩니다. 하지만 제가 원하는 방법은 아니죠..ㅍ 검색해보면 prisma 가 많이 나오는데.. 그것 또한 시스템상 제가 원하는 방식이 아닙니다. springboot security 에서 jwt를 받아와서 nextauth에 로그인을 할수 있는 방법은 없을까요? custom login 페이지를 만들어서 해야 할거 같은데 방법을 잘 모르겠습니다. 현재 springboot 서버에 cors 설정이 정상적으로 허용된 상태입니다.

개발자

#nextauth

#springboot

#jwt

#nextjs

#typescript

답변 1

댓글 0

조회 1,297

10달 전 · 백승윤 님의 새로운 답변

서버 운영중에 궁금증이 생겼는데 이 로그는 해킹시도인가요?

django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'pingjs.qq.com'. You may need to add 'pingjs.qq.com' to ALLOWED_HOSTS. 2023-10-03 05:09:32,644 [ERROR] django.security.DisallowedHost: Invalid HTTP_HOST header: 'pingjs.qq.com'. You may need to add 'pingjs.qq.com' to ALLOWED_HOSTS. Traceback (most recent call last): File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/usr/local/lib/python3.9/site-packages/django/utils/deprecation.py", line 133, in __call__ response = self.process_request(request) File "/usr/local/lib/python3.9/site-packages/django/middleware/common.py", line 48, in process_request host = request.get_host() File "/usr/local/lib/python3.9/site-packages/django/http/request.py", line 167, in get_host raise DisallowedHost(msg) django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'pingjs.qq.com'. You may need to add 'pingjs.qq.com' to ALLOWED_HOSTS. 2023-10-03 05:09:32,646 [WARNING] django.request: Bad Request: /ping.js 2023-10-03 05:09:32,646 [WARNING] django.request: Bad Request: /ping.js 2023-10-03 05:38:50,055 [WARNING] django.request: Not Found: /wp-admin/setup-config.php 2023-10-03 05:38:50,055 [WARNING] django.request: Not Found: /wp-admin/setup-config.php 2023-10-03 05:38:55,464 [WARNING] django.request: Not Found: /wp-admin/install.php 2023-10-03 05:38:55,464 [WARNING] django.request: Not Found: /wp-admin/install.php 2023-10-03 05:39:03,014 [WARNING] django.request: Not Found: /readme.html 2023-10-03 05:39:03,014 [WARNING] django.request: Not Found: /readme.html 2023-10-03 05:39:12,407 [WARNING] django.request: Not Found: /license.txt 로그를 까보면 이런식으로 무언가 요청을 엄청 많이 하더라구요 ?? 방지하는 방법이라던가 혹시 어떻게 대처해야할지 아시는분이 있을까요 ..?

개발자

#django

#nginx

답변 2

댓글 0

추천해요 1

조회 750

2년 전 · 삭제된 사용자 님의 새로운 답변

사이드 프로젝트 중인데, 여기서 어디로 방향을 잡아야 할지 모르겠습니다.

올해 졸업 후 spring boot 백엔드 취준을 시작했습니다. 4월 즈음 프로젝트 인원을 모아 기획자, 동시에 백엔드 개발 역할로 프로젝트를 시작했습니다. 현재 어느 정도 진행되었지만, 공부가 부족해 어느 방향으로 나아가야 할지 정체된 상황입니다. 주제는 커리어리, 인프런 같이 스터디나 사이드 프로젝트 인원을 찾는 사이트입니다. 기본적인 레이어 개발은 거의 완성된 상황(api 및 비즈니스 로직 , 데이터 페이징 등)이고, spring security, jwt를 적용한 로그인/ 로그아웃도 구현되었습니다. 이 다음 어디로 나아갈지 고민중 입니다. 이 다음 단계로의 경험이 별로 없어 쉽지 않은 것 같습니다.. 제가 생각한 길은 이렇습니다. - 클라우드 설계. - 개발할 때 등한시 한 테스트 코드 다시 만지기 - ?? 사실 제대로 하고 있는 지 의문이 들지만,, 저희 스스로 할 수 있는 최대한 해보려 합니다. 도움 주시면 감사하겠습니다

개발자

#spring-boot

#사이드프로젝트

#백엔드

답변 1

댓글 0

조회 235

2년 전 · 암소메애 님의 새로운 답변

django의 request로 받는 imagefile

안녕하세요. 저는 스타트업회사에서 백엔드 개발자로 근무하고 있습니다! django의 drf 프레임워크를 활용하여 api를 생성하여 사용합니다. 개발을 하던 도중에, 모바일 앱(react-native)에선 사진을 uri, name, type의 필드들로 이루어진 json 객체를 보내는데 이것을 어떤 원리로 django가 사진이라고 이해하고 저장하는지가 궁금합니다 왜냐하면, 기존에 있던 사진들을 s3에 저장된 url 문자열로 frontend에 보내주는데, 그 값을 가지고 다시 uri, type, name으로 쪼개서 다시 백으로 넘겨준다고 하더라고요(기존 사진을 그대로 사용하는 경우) 그런데 그렇게 받은 사진에 대한 객체를 처리하기 전에, s3상에서 그 파일이 삭제가 된 경우에도 정상적으로 작동하는 이유를 모르겠어서 그렇습니다 웹(react)에서는 같은 백 api를 사용하더라도 작동이 안 되고, 앱에서는 작동이 잘 되는데 이것 역시 원인을 잘 모르겠습니다...

개발자

#django

#react

#react-native

#drf

답변 1

댓글 0

조회 66

2년 전 · 커리어리 AI 봇 님의 새로운 답변

초보 개발 질문입니다. Spring Security를 사용해보려고 하는데 활용방법 있을까요?

환경 : Spring boot : 빠른 설정 추가를 위해서 사용합니다. jsp : jsp를 이용하지만 axios로 프론트-백엔드를 연결합니다. JPARepository : 쿼리 작성을 간편화 하기 위해 사용합니다. ORACLE : 사용하는 데이터 베이스 입니다. 하고 싶은 기능은 : Spring Security 를 통한 로그인, 로그인 시 jwt토큰 발급입니다. 로그인, 회원가입 기능을 구현중인데 Spring Security 라는 프레임워크가 있길래 사용해보려고합니다. 회원가입은 자체적으로 만들었는데 로그인 기능은 기존에 Controller - Service - DB 를 통해 DB에서 아이디, 비밀번호 일치하는지 확인하고 jsp를 이용했기 때문에 Session에 로그인 정보를 담아 주었습니다. 이번에는 axios를 통해 프론트엔드에서 요청을 보내면 서버에서 응답하는 방식을 사용해보려고합니다. (jsp + axios 입니다.) 그리고 로그인이 성공하면 jwt토큰을 발행해서 로그인을 유지시켜주려고 합니다. 그래서 대부분 Spring Security 와 jwt를 같이 사용하길래 저도 사용해보려고합니다. Spring Security를 사용하면 로그인, 인증, 토큰 관리 등을 더 편하게 사용할 수 있다고해서 사용해보려고하는데 Spring Security의 대표적으로 사용하는 기능은 또 무엇이 있을까요? 그리고 Spring Security를 사용하면 어떤 점에서 장점이 있을까요? 너무 부족한 질문들이라 죄송합니다. 답변해주시면 잘 참고하겠습니다.

개발자

#spring-security

#jwt

#spring-boot

답변 1

댓글 0

조회 225

2년 전 · 커리어리 AI 봇 님의 새로운 답변

spring boog Oauth2 client 질문 합니다!

react.js (port:3000) srping boot(port: 8080) 각각 배포 한 상황입니다. 인터넷에서 많은 자료를 찾을 수 있지만, 프로덕션에서 사용하기엔 좀 많은 걱정들이 있이서, 해소 되지 않은 부분들을 몇가지 여쭈어봅니다! 1. 많은 예시를 보면,  flow 는 이렇더라구요 - 사용자가 구글 로그인을 클릭함 (localhost:8080/oauth2/google?redirect_uri=localhost:3000/ ) 이 링크는 서버에서 사용자를 구글 로그인으로 리다이렉트 시키고, qusery String 으로 작성된 redirect_uri 는 최종 목적지 (login 이 success 되고 난 후 이동 할 )redirect_uri 이다 - 서버(8080)에서는 이용자가 구글로그인을 할 경우 code 를 받아와서 해당 code 로 다시 provider (google) 에게 유저의 정보를 제공 받은 이후 JWT 를 생성하여 사용자가 맨처음 구글로그인을 클릭했을때 redirect_uri 에 작성된 localhost:3000에 쿼리스트링으로 accessToken 을 포함해서 리다이렉션 시킨다 (localhost:3000?accessT=e.....) - 클라이언트는 해당 토큰을 저장하고 후처리를 진행한다 라고 하는 경우가 많았습니다. 그런데 이렇게되면 url 에 accessToken 이 url 에 노출되는게 맞나? 싶더라구요 사실 쿠키로 심어서 보내면 되겠지만 요구사항에는 쿠키를 사용하지 않기로 했습니다. 그러면 어떻게 처리해야할까요? 도저히 클라이언트에서 안전하게 토큰을 받을 수 있는 방법이 떠 오르질 않네요 ... 2. 보통 프로덕션에서는 User table 과 OAuth2 table 을 별도로 두나요 ? ( Oauth2 테이블은 OAuth2 에서 제공받은 id, provider, userFK 정도만 저장 )

개발자

#spring-boot

#oauth2.0

답변 1

댓글 0

조회 178

2년 전 · 달레 님의 답변 업데이트

Spring security로 OAuth2.0 인증 후 클라이언트에게 JWT 보내기

spring security와 소셜 로그인 , JWT를 같이 써보려고 개인적으로 연습을 하던 중 의문이 들어서 이렇게 질문을 올립니다. 제가 생각한 과정은 다음과 같습니다 1. 클라이언트가 서버에 구글 로그인 요청을 보낸다 {{BASE_URL}}/oauth/authorization/google -> 스프링 시큐리티에서 기본적으로 제공하는 로그인 경로입니다. 2. 서버에서 스프링 시큐리티의 과정에 따라 유저 정보를 가져온 후 데이터베이스에 저장하고 JWT을 발급한다. 3. 발급된 JWT를 클라이언트에게 response로 던져준다. 의 과정이였는데 생각해보니 3번의 발급된 JWT를 클라이언트에게 못던져주겠다는 생각이 들었습니다. 클라이언트에서 서버의 로그인 URI에 접근하면 이미 클라이언트의 손을 떠난 request가 되는데 response를 클라이언트에게 던져줄 방법이 없는 것 같아서,,, 혹시 이부분에 대해서 알려주실 수 있는지 궁금합니다. 클라이언트와 통신을 해야하는 상황이라면 클라이언트에게 인가 코드나 access_token을 받아서 서버에서 자체적으로 http 통신을 하는 방법밖에 없는지도 궁금합니다. security에서 OAuth2.0에 대한 인증 인가가 굉장히 편하게 만들어져 있다고 생각했는데 이런 부분에서 막히네요 ㅠ

개발자

#java

#spring-boot

#spring-security

#oauth2.0

답변 1

댓글 1

추천해요 1

조회 438

2년 전 · 박상우 님의 질문

Spring boot 3.x 카카오 Oauth 구현을 처음 해보는데요.

스프링부트 3.x, Spring security, Oauth2 버전 이용해서 카카오 로그인 인증을 구현하려고 하는데요. 구글링으로 레퍼런스를 찾아봐도 자료가 많이 없는데 혹시 추천해주실 문서가 있을까요?ㅜㅜ

개발자

#oauth

#springboot

#login

답변 0

댓글 0

추천해요 1

조회 201