Photoprism: ๊ธฐ๋ณธ ์Šค๋งˆํŠธํฐ ์•ฑ

์— ๋งŒ๋“  2018๋…„ 10์›” 08์ผ  ยท  33์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: photoprism/photoprism

Android ๋ฐ iOS์šฉ. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์›น UI(๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ)์™€ ์œ ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ์ฃผ์š” ์ด์œ : ํŠนํžˆ PhotoPrism์ด ์ง‘์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๊ฒฝ์šฐ ์žฅ์น˜์— ์ €์žฅ๋œ ์‚ฌ์ง„์˜ ์ž๋™ ์—…๋กœ๋“œ/๋™๊ธฐํ™”(์žฅ์น˜๋Š” ๋™์ผํ•œ Wi-Fi ๋„คํŠธ์›Œํฌ์— ์žˆ์–ด์•ผ ํ•จ).

์•„๋งˆ๋„ NativeScript๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? https://www.nativescript.org/

done epic idea

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋งˆ๋„ ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค :)
๊ฐ„ํŽธํ•œ ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ ๋‚ด์žฅ!

๋ชจ๋“  33 ๋Œ“๊ธ€

์•„๋งˆ๋„ ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค :)
๊ฐ„ํŽธํ•œ ๋จธํ‹ฐ๋ฆฌ์–ผ ๋””์ž์ธ ๋‚ด์žฅ!

Flutter๋Š” ๊ด€์‹ฌ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ https://godoc.org/golang.org/x/mobile & flutter๋กœ ์•ฑ ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ปดํŒŒ์ผ/์‹คํ–‰ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์šฐ๋ฆฌ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

golang์ด ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค ๐Ÿ˜

๊ฐ€์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ flutter๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์‹คํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ํ”„๋กœ์ ํŠธ๋Š” ์‹คํ—˜์ž…๋‹ˆ๋‹ค. ํ˜„์ƒ ์œ ์ง€์— ๋งŒ์กฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@lastzero ์†”์งํžˆ '์ข‹์€ 1ํ˜ธ' ์น˜๊ณ ๋Š” ์ข€ ํฐ ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿ˜„

๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค ์ฒซ ๋ฒˆ์งธ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค ;) ์•„์ง ์•„๋ฌด ๊ฒƒ๋„, ๋†€ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆฐ ํ•„๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ API imo๋ฅผ ์ž˜ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ๋ฐฉ๋ฒ•์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ• ์ง€ ์•„์ง ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์ข‹์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํž™์Šคํ„ฐ ๊ธฐ์ˆ ์ด ์ ์šฉ๋œ 10๊ฐœ์˜ ํฌ์žฅ๋œ ์ปจํ…Œ์ด๋„ˆ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์›น ๊ธฐ์ˆ ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ํ›Œ๋ฅญํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„๋งˆ๋„ ํž™์Šคํ„ฐ ๊ธฐ์ˆ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ์— ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ReactNative ํฌ๋กœ์Šค ํ”Œ๋žซํผ, ํ›„๋“œ ์•„๋ž˜์—์„œ JS ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ตฌ์„ฑ ์š”์†Œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์œ„์— ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค( Vue ์™€ ๋™์ผ). Flutter ์™€ ๋‹ฌ๋ฆฌ RN ์—๋Š” ๋ชจ๋“  ์ทจํ–ฅ์— ๋งž๋Š” ๋ฐฉ๋Œ€ํ•œ ๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2) Flutter ํฌ๋กœ์Šค ํ”Œ๋žซํผ, ์ธ๊ธฐ ์—†๋Š” Google ์˜ Dart ์ž์ฒด ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์•ฑ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด React ์™€ ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(_Widgets_ ํ˜ธ์ถœ). ์ Š์€ ํ”„๋ ˆ์ž„์›Œํฌ์ด์ง€๋งŒ ๋น ๋ฅด๊ฒŒ ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ์กด์˜ ํ”„๋กœ๋•์…˜ ์ค€๋น„ ์œ„์ ฏ ์ˆ˜์—์„œ ํ›จ์”ฌ ์—ด๋“ฑํ•ฉ๋‹ˆ๋‹ค.

3) ๋ชจ๊ตญ์–ด ๋ฐ ํ”Œ๋žซํผ๋ณ„ SDK. iOS์šฉ Swift ๋ฐ Android์šฉ Kotlin . _๊ฐ„๋‹จํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์€_ ๊ฒƒ์€ Objective-c ๋ฐ Java ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ NativeScript ๋˜๋Š” Vue Native ์™€ ๊ฐ™์€ ์ˆ˜๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์ €๋Š” React Native ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์žˆ์—ˆ๊ณ  "_Hello World_" ํŠœํ† ๋ฆฌ์–ผ๋ณด๋‹ค ๋” ๋ณต์žกํ•œ ๊ฒƒ์„ ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด _SOMETHING-NATIVE_ ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด ์‹ฌ์ธต ๋ถ„์„์—์„œ ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก . ํž™์Šคํ„ฐ๊ฐ€ ๋˜๊ณ  ์‹ถ๊ณ  _์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด_๋ฅผ ๋ฏฟ๋Š”๋‹ค๋ฉด ReactNative ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ทธ๊ฒƒ์€ ์ข‹์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋งŽ์€ pull ์š”์ฒญ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฌ๋ฏธ์žˆ๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด Flutter ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ํฐ ๋„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. BTW, Dart ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋ฉฐ JS ๋ฐ TS ์˜ ๋Œ€์•ˆ์œผ๋กœ ๋งˆ์Œ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์ด ์ข‹์€ ์‚ฌ๋žŒ์ด๊ณ  ๋งˆ์Œ๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์œ  ์‹œ๊ฐ„์ด ๋งŽ๋‹ค๋ฉด Swift ์™€ Kotlin ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๊ฒƒ์€ "_Hello World_" ํŠœํ† ๋ฆฌ์–ผ๋ณด๋‹ค ์–ด๋ ค์šด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Swift ์™€ Kotlin ์€ ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•˜๋Š” ํ˜„๋Œ€ ์–ธ์–ด๋กœ ๋ชจ๋“  ์ž‘์—…์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ์ด ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.์•ˆ๋„๋จ:

๋‚˜๋Š” ๋˜ํ•œ ๊ฑฐ๊ธฐ์— ์„ธ ๊ฐ€์ง€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ˜์‘ : D

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—…๋กœ๋“œํ•˜๊ณ  ์‚ฌ์ง„ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋ฐ˜์‘ํ˜•์ด๋‚˜ ํ”Œ๋Ÿฌํ„ฐ๋กœ ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

์ด ๊ฒฝ์šฐ์—๋„ ๊ธฐ๋ณธ ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Flutter์™€ React Native๋Š” ๋ณด๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด์–ด์„œ API/๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋„ค์ดํ‹ฐ๋ธŒ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋Š”๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ JS์™€ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ๊ฐ„๋‹จํ•ด ์ง€๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

๋˜ํ•œ ๊ธฐ๋ณธ Google ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” Google์—์„œ ์ œ์™ธ๋˜๊ฑฐ๋‚˜ ์ œ๊ณต๋˜๋Š” ๋” ๋‚˜์€ ๋””์ž์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. React Native์—๋Š” ์ข‹์€ Material Design ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Flutter๋งŒ์ด ์ •๋ง ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ข‹์€ ๋””์ž์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Flutter๋Š” ๋ชจ๋“  ์Šค๋งˆํŠธํฐ์—์„œ ์ข‹์€ ๋””์ž์ธ๊ณผ ์ „ํ™˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํŠน์ˆ˜ ๊ตฌ์„ฑ์—์„œ ์ถฉ๋Œํ•˜๋Š” ์žฅ์น˜์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ์ด๊ฒƒ์€ ์„ฑ๊ฐ€์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@danieldaeschle Flutter๋กœ UI๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ iOS ์•ฑ์—์„œ Dart ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI๋Š” ๋‘ ํ”Œ๋žซํผ ๋ชจ๋‘์—์„œ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ๋ณด์ด๋ฉฐ ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๋งŒ Swift ๋˜๋Š” Kotlin์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ •ํ™•ํžˆ

๊ณ„ํš ๊ฐ™์€ ์†Œ๋ฆฌ. ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ณต์œ  Dart/Flutter ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ๋‹ค๋ฅธ ๋‘ ๋””๋ ‰ํ† ๋ฆฌ์— iOS ๋ฐ Android์šฉ ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” photoprism-mobile ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

Flutter ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ ์ด ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ณ„ํš ๊ฐ™์€ ์†Œ๋ฆฌ. ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ณต์œ  Dart/Flutter ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ๋‹ค๋ฅธ ๋‘ ๋””๋ ‰ํ† ๋ฆฌ์— iOS ๋ฐ Android์šฉ ํ”Œ๋žซํผ๋ณ„ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” photoprism-mobile ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € _์‚ฌ์ง„ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šค_, _๋ณ‘๋ ฌ ๋ฐฐ๊ฒฝ ์—…๋กœ๋“œ_(์—ฌ๋Ÿฌ ๊ฐœ์ฒด)์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด Google์—์„œ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. _์‚ฌ์ง„ ํŽธ์ง‘_, _๋ชฉ๋ก ๊ตฌ์„ฑ ์š”์†Œ ์„ฑ๋Šฅ_ ๋งŽ์€ ์ˆ˜์˜ ์ด๋ฏธ์ง€ ๊ฐœ์ฒด ๋“ฑ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์šด์ง€ ์—ฌ๋ถ€ ๋“ฑ.

UI ํ‚คํŠธ ๋˜๋Š” ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜์™€ ๊ฐ™์€ ์‚ฌ์†Œํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์‚ฌ์†Œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์—์„œ ๋…ผ์˜ํ•œ ๋ชจ๋“  ๊ธฐ์ˆ ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋…„ ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์„ ์‹ฌ๋„ ์žˆ๊ฒŒ ์‹คํ—˜ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ ๊ฐ„๋‹จํ•œ ํƒ€๋‹น์„ฑ ์กฐ์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Flutter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์—ฐ ๋กœ๋”ฉ ๋ณด๊ธฐ๋ฅผ ๋งค์šฐ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ง„ ํŽธ์ง‘์€ Dart๋กœ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ณ‘๋ ฌ ์—…๋กœ๋“œ๋Š” kotlin/swift๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@lastzero ๋‚˜๋จธ์ง€ API ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žˆ์Šต๋‹ˆ๊นŒ?

@santoshgistto ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ Wiki์— ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ธ๋ผ์ธ ๋ฌธ์„œ์— ๊ฒฝ๋กœ์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://godoc.org/github.com/photoprism/photoprism/internal/api

๋‚ด ์ฝ”๋“œ๊ฐ€ GOPATH ์™ธ๋ถ€์— ์žˆ๊ณ  godoc ์„œ๋ฒ„๊ฐ€ ์•„์ง ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์•ฝ๊ฐ„ ์„ฑ๊ฐ€์‹  ์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค...

@lastzero๋‹˜ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” API๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋‹ค

http://localhost:2342/api/v1/photos?count=1
The response missing thumbnail url
[{"ID":19,"CreatedAt":"2018-11-06T07:31:22Z","UpdatedAt":"2018-11-06T07:31:22Z","DeletedAt":"0001-01-01T00:00:00Z","TakenAt":"2018-08-11T10:51:32Z","PhotoTitle":"Handkerchief / 2018","PhotoDescription":"","PhotoArtist":"","PhotoKeywords":"","PhotoColors":"chocolate, coral, darkorange, gray, grey, lightslategray, lightslategrey, orangered, slategray, slategrey, tomato","PhotoVibrantColor":"#f76f1f","PhotoMutedColor":"#925b97","PhotoCanonicalName":"20180811_105132_2FFDA64D425B","PhotoLat":0,"PhotoLong":0,"PhotoFavorite":false,"CameraID":2,"CameraModel":"Unknown","CameraMake":"","LensID":3,"LensModel":"Unknown","LensMake":"","CountryID":"","CountryName":"","LocationID":0,"LocDisplayName":"","LocName":"","LocCity":"","LocPostcode":"","LocCounty":"","LocState":"","LocCountry":"","LocCountryCode":"","LocCategory":"","LocType":"","FileID":19,"FilePrimary":true,"FileMissing":false,"FileName":"2018/08/20180811_105132_2FFDA64D425B.jpg","FileHash":"2ffda64d425b0f9ca49318bc0b951d1a7c081266","FilePerceptualHash":"adb5","FileType":"jpg","FileMime":"image/jpeg","FileWidth":564,"FileHeight":414,"FileOrientation":1,"FileAspectRatio":1.36,"Tags":"handkerchief"}]



md5-78e4f1074b633c5137445e8cd1ef760d



http://localhost:2342/api/v1/thumbnails/square/500/df54169be1f0c93805dccc82b753153c30d1c1c0

์ธ๋„ค์ผ์€ ํฌ๊ธฐ ๋ฐ ํ˜•์‹๊ณผ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ๋‹จ์ผ ์ƒ์ˆ˜ URL์€ ์—†์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ๊ธฐ๋ณธ/์˜ˆ์ œ ์ธ๋„ค์ผ URL์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@lastzero ๋•๋ถ„์— ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์•จ๋ฒ” ๋ฐ ํƒœ๊ทธ ์„ธ๋ถ€ ์ •๋ณด ๋“ฑ์„ ์–ป๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋” ๋งŽ์€ API๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ˜„์žฌ ๋ฌธ์„œํ™” ๋“ฑ์œผ๋กœ ๋ฐ”์˜๋‹ค - ์™„๋ฃŒ๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ/api ์ถ”๊ฐ€

์ข‹์•„, ํ˜„์žฌ ๋‚˜๋Š” ๋˜ํ•œ ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ POC ์•ฑ์„ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”,

@santoshgistto ๊ธฐ์—ฌ์ž ๋ชฉ๋ก์— ์ž์‹ ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/photoprism/photoprism/wiki/Contributors

@santoshgistto ์˜ˆ์ œ ์•ฑ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ๊ด€๋ จ ์ •๋ณด๋ฅผ ์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค: https://github.com/photoprism/photoprism/wiki/Mobile-Apps

๋‚˜๋Š” react-native๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ๋ณด๊ธฐ์— ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๋ณธ ์•ฑ ์ฝ”๋“œ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋ชจ๋“  ๊ฒƒ์ด ์ฃผ์š” ๋ชฉํ‘œ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๊นŒ?
์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์ง„์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์‚ฌ๋žŒ๋“ค์ด ํฌํ† ํ”„๋ฆฌ์ฆ˜ ์‚ฌ์šฉ์— ๊ด€์‹ฌ์„ ๊ฐ–๋„๋ก ํ•˜๋Š” ํ›Œ๋ฅญํ•œ ์ฒซ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ, ์ดํ›„์—๋Š” ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์—…๋กœ๋“œ ๋ฐ ๊ธฐํƒ€ ์›ํ•˜๋Š” ๊ฒƒ).

์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…, https://github.com/photoprism/photoprism-mobile ์ฐธ์กฐ

์—ฌ๊ธฐ์—์„œ ๋‹ซ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰